CNN Project - Face Recognition

Author: Vinayak Hampiholi

Index ¶

  • Index
  • Description
    • Context
    • Objective
      • Part - A To build a face detection system
      • Part - B To create an image dataset to be used by the AI team to build image classifier data
      • Part - C To build a face recognition system
    • Data Dictionary
      • Part - A
      • Part - B
      • Part - C
    • Import the necessary libraries
  • I. Part - A
    • Part I: Data Preprocessing and Visualization
      • a) Import the data "Images.npy"
      • b) Split the images and their mask into two objects
      • c) Resize the images and masks to the same shape and visualize the original and masked images
      • d) Split the data into train and test
    • Part I: Model Building and Evaluation
      • a) Design a face mask detection model
      • b) Evaluate and share insights on performance of the model
      • c) Predict and visualize the masks for the test images
    • Part I: Predicting Face Masks from Images
      • a) Import images from folder ‘training_images’
      • b) Detect faces, extract metadata for the faces in all the images, and write and save it into a DataFrame
  • II. Part - B
    • Part II: Data Processing
      • a) Import the data ‘PINS.zip’
      • b) Read the images and extract labels from the filenames for all the folders
    • Part II: Visualizing Similar Images
      • a) Generate embedding vectors for each image in the dataset
      • b) Choose a distance metric and use it along with a threshold to display similar and dissimilar images
  • III. Part - C
    • Part III: Model Building and Inference
      • a) Apply PCA on the embedding vectors
      • b) Build and train a SVM classifier on top of it
      • c) Use the trained SVM model to predict the labels of the test images
  • IV. Actionable Insights & Recommendations
    • Part IV: Write down insights from the analysis conducted
    • Part IV: Provide actionable business recommendations

Description ¶

Context ¶

Company X owns a movie application and repository that caters to movie streaming to millions of users on a subscription basis. The company wants to automate the process of cast and crew information in each scene from a movie such that when a user pauses on the movie and clicks on the cast information button, the app will show details of the actor in the scene. The company has in-house computer vision and multimedia experts who need to detect faces from screenshots of the movie scene.

Objective ¶

Part - A To build a face detection system ¶

Part - B To create an image dataset to be used by the AI team to build image classifier data ¶

Part - C To build a face recognition system¶

Data Dictionary ¶

Part A ¶

  • label: Identifies the object in the image
  • notes: Additional comments (currently empty)
  • points: Co-ordinates of the mask (top-left and bottom-right)
  • imageWidth: Width of the image in pixels
  • imageHeight: Height of the image in pixels

Part B ¶

The dataset comprises facial images that may contain either multiple individuals or a single individual per image.

Part C ¶

This dataset consists of 10,770 images collected from Pinterest, featuring 100 individuals.

Import Libraries ¶

In [2]:
# Set the logging only for the errors
import logging
logging.getLogger("matplotlib").setLevel(logging.ERROR)
In [3]:
# Make warnings not displayed
import warnings
warnings.filterwarnings("ignore")
In [4]:
# Import display and MarkDown from IPython to display the messages in text cell via python code block
import IPython
from IPython.display import display, Markdown, Image
display(Markdown("**Observations:**\n- IPython version {}.".format(IPython.__version__)))

Observations:

  • IPython version 8.31.0.
In [5]:
# Import numpy for loading npy data
import numpy as np
display(Markdown("**Observations:**\n- Numpy version {}.".format(np.__version__)))

Observations:

  • Numpy version 1.26.4.
In [6]:
# Import pyplot from matplotlib to pictorize the image data
import matplotlib
from matplotlib import pyplot as plt
from matplotlib import gridspec as gdspec

display(Markdown("**Observations:**\n- matplotlib version {}.".format(matplotlib.__version__)))

Observations:

  • matplotlib version 3.7.1.
In [7]:
# Import cv2 package
import cv2
display(Markdown("**Observations:**\n- cv2 version {}.".format(cv2.__version__)))

Observations:

  • cv2 version 4.10.0.
In [22]:
# Import tensorflow packages
import tensorflow as tf
from tensorflow.keras.applications.mobilenet import preprocess_input
from tensorflow.keras.models import Model, Sequential, model_from_json
from tensorflow.keras.layers import Concatenate, UpSampling2D, Conv2D, Reshape, Activation, BatchNormalization, SpatialDropout2D
from tensorflow.keras.layers import ZeroPadding2D, Convolution2D, MaxPooling2D, Dropout, Flatten, Activation
from tensorflow.keras.applications.mobilenet import MobileNet
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping, ReduceLROnPlateau
from tensorflow.keras.losses import binary_crossentropy
from tensorflow.keras.backend import log, epsilon

display(Markdown("**Observations:**\n- tensorflow version {}.".format(tf.__version__)))

Observations:

  • tensorflow version 2.18.0.
In [8]:
import sklearn
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
from sklearn.model_selection import GridSearchCV, StratifiedKFold
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.decomposition import PCA

display(Markdown("**Observations:**\n- skelarn version {}.".format(sklearn.__version__)))

Observations:

  • skelarn version 1.5.1.
In [9]:
# Import random package to print the random number
import random
In [10]:
# Import os
import os
In [11]:
# Import pandas
import pandas as pd

display(Markdown("**Observations:**\n- pandas version {}.".format(pd.__version__)))

Observations:

  • pandas version 1.5.3.
In [12]:
# Import zip file
from zipfile import ZipFile
In [13]:
# Import tqdm to show the progress
from tqdm.notebook import tqdm

I. Part - A ¶

Part I: Data Preprocessing and Visualization ¶

a) Import the data "Images.npy" ¶

a) Import and Understand the data:

Dataset info

The dataset is encoded in npy format which is another standard file format which is used in industries to reduce memory ( RAM ) consumption

b) Import and Read ‘Images.npy’

https://stackoverflow.com/questions/33480297/viewing-npy-images

https://note.nkmk.me/en/python-numpy-load-save-savez-npy-npz/

Npy files are X train and X test data

In [14]:
# Import and read "images.npy" allow_pickle = True allows the load command to succeed
ImageURL = "Images.npy"
ImagesData = np.load(ImageURL, allow_pickle = True)
if ImagesData is None:
    display(Markdown("**Observations:**\n- Errors occurred while loading the data and the data loading is unsuccessful."))
else:
    display(Markdown("**Observations:**\n- No errors occurred while loading the data and the data loading is successful."))

Observations:

  • No errors occurred while loading the data and the data loading is successful.
In [15]:
# Dataset info
display(Markdown("**Observations:**\n"))
display(Markdown("- There are {} rows and {} columns in the Image Dataset.".format(ImagesData.shape[0], ImagesData.shape[1])))
display(Markdown("- The datatype is {}.".format(ImagesData.dtype)))
display(Markdown("- The number of dimensions is {}.".format(ImagesData.ndim)))
display(Markdown("- The number of elements is {}.".format(ImagesData.size)))

Observations:

  • There are 393 rows and 2 columns in the Image Dataset.
  • The datatype is object.
  • The number of dimensions is 2.
  • The number of elements is 786.
In [16]:
 # Understand the data by analyzing the first 1 row and their first column
for i in range(0, 1):
    fig = plt.figure(figsize = (15, 10))
    ax = fig.add_subplot(1, 1, 1)
    plt.axis("off")
    plt.imshow(ImagesData[i][0])
plt.show()
No description has been provided for this image
In [17]:
# Understand the data by analyzing the first 1 row and their second column
for i in range(0, 1):
    print(ImagesData[i][1])
[{'label': ['Face'], 'notes': '', 'points': [{'x': 0.08615384615384615, 'y': 0.3063063063063063}, {'x': 0.1723076923076923, 'y': 0.45345345345345345}], 'imageWidth': 650, 'imageHeight': 333}, {'label': ['Face'], 'notes': '', 'points': [{'x': 0.583076923076923, 'y': 0.2912912912912913}, {'x': 0.6584615384615384, 'y': 0.46846846846846846}], 'imageWidth': 650, 'imageHeight': 333}]

Observations:

  • There are images in the first column and the label with points on the second column.
In [18]:
# Check the image height and width of first 1 values
for i in range(0, 1):
    print("Image Width: " + str(ImagesData[i][1][0]["imageWidth"]) + " and Image Height: " + str(ImagesData[i][1][0]["imageHeight"]))
Image Width: 650 and Image Height: 333

Observations:

  • Different images have different sizes.
  • We will be using a unified size for all the images for further processes.

b) Split the images and their mask into two objects ¶

In [19]:
# Setting the image dimensions to 224 as we will be using the pre-trained model mobilenet and this requires the image size to be 224 as mentioned in https://keras.io/api/applications/mobilenet/
ALPHA = 1

IMAGE_SIZE = 224
IMAGE_HEIGHT = 224
IMAGE_WIDTH = 224

Create features and labels

  • Images will be stroed in X
  • Masks will be stored in ImageMaskData
In [20]:
# Split the image and their mask into two object
ImageMaskData = np.zeros((int(ImagesData.shape[0]), IMAGE_HEIGHT, IMAGE_WIDTH))
X = np.zeros((int(ImagesData.shape[0]), IMAGE_HEIGHT, IMAGE_WIDTH, 3))

c) Resize the images and masks to the same shape and visualize the original and masked images ¶

In [23]:
# Use cv2.resize() to resize the images with interpolation=cv2.INTER_CUBIC so that we can use Cubic Interpolation that maintains the higher quality
for index in range(ImagesData.shape[0]):
    image = ImagesData[index][0]
    image = cv2.resize(image, dsize = (IMAGE_HEIGHT, IMAGE_WIDTH), interpolation = cv2.INTER_CUBIC)
    try:
      image = image[:, :, :3]
    except:
      continue
    X[index] = preprocess_input(np.array(image, dtype = np.float32))
    for i in ImagesData[index][1]:
        x1 = int(i["points"][0]["x"] * IMAGE_HEIGHT)
        x2 = int(i["points"][1]["x"] * IMAGE_WIDTH)
        y1 = int(i["points"][0]["y"] * IMAGE_HEIGHT)
        y2 = int(i["points"][1]["y"] * IMAGE_WIDTH)
        ImageMaskData[index][y1:y2, x1:x2] = 1
In [24]:
# Print the first 1 masked images
for i in range(0, 1):
    fig = plt.figure(figsize = (15, 10))
    ax = fig.add_subplot(1, 1, 1)
    plt.axis("off")
    plt.imshow(ImageMaskData[i])
plt.show()
No description has been provided for this image

d) Split the data into train and test ¶

c) Split the data into Features(X) & labels(Y). Unify shape of all the images.

Either train test split can be used to mention the % of data

For example there are 1000 images , 700 images forms 70 % of the data , In similar way for 409 images, calculate the % of data for train and test

Another way to split :

If df is a data frame which has npy images say 110 images

Train= df [ :100 ] train will have 100 images

Test= df[100:] test will have 10 images

In [23]:
# There are 393 rows in the images.npy 70-30% split needs to be calculated
TrainSize = round(ImagesData.shape[0] * 70 / 100)
TestSize = round(ImagesData.shape[0] * 30 / 100)
display(Markdown("**Observations:**\n"))
display(Markdown("- The 70% of total rows {} is {}.".format(ImagesData.shape[0], TrainSize)))
display(Markdown("- The 30% of total rows {} is {}.".format(ImagesData.shape[0], TestSize)))

Observations:

  • The 70% of total rows 393 is 275.
  • The 30% of total rows 393 is 118.

The description in the problem statement says that there are 409 images. However, only 393 images were found while loading the data. Hence proceeding with the same count.

In [24]:
# Split the data according to TrainSize and TestSize
XTrain = X[:TrainSize]
YTrain = ImageMaskData[:TrainSize]

XTest = X[TrainSize:]
YTest = ImageMaskData[TrainSize:]
In [25]:
# Check the rows and column details of train and test datasets
display(Markdown("**Observations:**\n"))
display(Markdown("- There are {} rows and {} columns in the XTrain.".format(XTrain.shape[0], XTrain.shape[1])))
display(Markdown("- There are {} rows and {} columns in the XTest.".format(XTest.shape[0], XTest.shape[1])))
display(Markdown("- There are {} rows and {} columns in the YTrain.".format(YTrain.shape[0], YTrain.shape[1])))
display(Markdown("- There are {} rows and {} columns in the YTest.".format(YTest.shape[0], YTest.shape[1])))

Observations:

  • There are 275 rows and 224 columns in the XTrain.
  • There are 118 rows and 224 columns in the XTest.
  • There are 275 rows and 224 columns in the YTrain.
  • There are 118 rows and 224 columns in the YTest.

d) What is Unify shape of all images ?

→ Its resizing of the Images as per architecture used. https://keras.io/api/applications/mobilenet/ mentions that the size of the image should be 224, 224. Hence using the same.

e) Select random image from the train data and display original image and masked image.

→ Select any random image from training data and then display the original image and its mask separately.

In [26]:
# Select a random number between 0 to TrainSize and print the Train data
random_number = random.randint(0, TrainSize)
fig = plt.figure(figsize = (15, 10))
ax = fig.add_subplot(1, 1, 1)
plt.axis("off")
plt.title("XTrain Image "+ str(random_number))
plt.imshow(XTrain[random_number])
plt.show()
No description has been provided for this image
In [27]:
# Print the Image Masked Data for the same random number
fig = plt.figure(figsize = (15, 10))
ax = fig.add_subplot(1, 1, 1)
plt.axis("off")
plt.title("Image Mask Data " + str(random_number))
plt.imshow(ImageMaskData[random_number])
plt.show()
No description has been provided for this image

Part I: Model Building and Evaluation ¶

a) Design a face mask detection model ¶

f) Model building - Q2.A - Refer to the below link

https://blog.paperspace.com/unet-architecture-image-segmentation/

g) Design your own Dice Coefficient and Loss function.

Implement a user defined function to define dice coefficient to calculate the loss.

Other information:

Information on Masking : https://www.tertiaryinfotech.com/masking-in-opencv/

Hence masks are Y train and Y test data

Final expectation of the project : To predict a mask on a given image

In [28]:
# The MobileNet model from keras.api.applications.mobilenet is a pre-trained deep neural network designed for mobile and embedded vision applications. 
# It is part of the Keras Applications module and is widely used due to its lightweight architecture and efficiency, making it ideal for resource-constrained environments.
# This function creates the model using MobileNet with additional layers
# MobileNet is a powerful powerful pre-trained model and more details can be obtained here: https://arxiv.org/pdf/1704.04861

def conv_block_simple(prevlayer, filters, prefix, strides=(1, 1)):
    conv = Conv2D(filters, (3, 3), padding = "same", kernel_initializer = "he_normal", strides = strides, name = prefix + "_conv")(prevlayer)
    conv = BatchNormalization(name = prefix + "BatchNormalization")(conv)
    conv = Activation("relu", name = prefix + "ActivationLayer")(conv)
    return conv

def create_model(trainable = True):
    model = MobileNet(input_shape = (IMAGE_HEIGHT, IMAGE_WIDTH, 3), include_top = False, alpha = ALPHA, weights = "imagenet")
    for layer in model.layers:
        layer.trainable = trainable
    
    block1 = model.get_layer("conv_pw_13_relu").output
    block2 = model.get_layer("conv_pw_11_relu").output
    block3 = model.get_layer("conv_pw_5_relu").output
    block4 = model.get_layer("conv_pw_3_relu").output
    block5 = model.get_layer("conv_pw_1_relu").output
    
    up1 = Concatenate()([UpSampling2D()(block1), block2])
    conv6 = conv_block_simple(up1, 256, "Conv_6_1")
    conv6 = conv_block_simple(conv6, 256, "Conv_6_2")

    up2 = Concatenate()([UpSampling2D()(conv6), block3])
    conv7 = conv_block_simple(up2, 256, "Conv_7_1")
    conv7 = conv_block_simple(conv7, 256, "Conv_7_2")

    up3 = Concatenate()([UpSampling2D()(conv7), block4])
    conv8 = conv_block_simple(up3, 192, 'Conv_8_1')
    conv8 = conv_block_simple(conv8, 128, 'Conv_8_2')

    up4 = Concatenate()([UpSampling2D()(conv8), block5])
    conv9 = conv_block_simple(up4, 96, "Conv_9_1")
    conv9 = conv_block_simple(conv9, 64, "Conv_9_2")

    up5 = Concatenate()([UpSampling2D()(conv9), model.input])
    conv10 = conv_block_simple(up5, 48, "Conv_10_1")
    conv10 = conv_block_simple(conv10, 32, "Conv_10_2")
    conv10 = SpatialDropout2D(0.2)(conv10)
    
    x = Conv2D(1, (1, 1), activation = "sigmoid")(conv10)
    x = Reshape((IMAGE_SIZE, IMAGE_SIZE))(x)
    return Model(inputs = model.input, outputs = x)

Observations:

  • Addding MobileNet as model with below parameter values
  • input_shape: IMAGE_HEIGHT, IMAGE_WIDTH, 3
  • include_top: False
  • alpha: 1.0
  • weights: "imagenet"
  • Adding UNET architecture layers
In [29]:
# Create a model using the above function
model = create_model()

Observations:

  • Model is created successfully.
In [30]:
# Validate the model creation by printing the summary
model.summary()
Model: "functional"
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓
┃ Layer (type)        ┃ Output Shape      ┃    Param # ┃ Connected to      ┃
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩
│ input_layer         │ (None, 224, 224,  │          0 │ -                 │
│ (InputLayer)        │ 3)                │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv1 (Conv2D)      │ (None, 112, 112,  │        864 │ input_layer[0][0] │
│                     │ 32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv1_bn            │ (None, 112, 112,  │        128 │ conv1[0][0]       │
│ (BatchNormalizatio… │ 32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv1_relu (ReLU)   │ (None, 112, 112,  │          0 │ conv1_bn[0][0]    │
│                     │ 32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_1           │ (None, 112, 112,  │        288 │ conv1_relu[0][0]  │
│ (DepthwiseConv2D)   │ 32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_1_bn        │ (None, 112, 112,  │        128 │ conv_dw_1[0][0]   │
│ (BatchNormalizatio… │ 32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_1_relu      │ (None, 112, 112,  │          0 │ conv_dw_1_bn[0][… │
│ (ReLU)              │ 32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_1 (Conv2D)  │ (None, 112, 112,  │      2,048 │ conv_dw_1_relu[0… │
│                     │ 64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_1_bn        │ (None, 112, 112,  │        256 │ conv_pw_1[0][0]   │
│ (BatchNormalizatio… │ 64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_1_relu      │ (None, 112, 112,  │          0 │ conv_pw_1_bn[0][… │
│ (ReLU)              │ 64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pad_2          │ (None, 113, 113,  │          0 │ conv_pw_1_relu[0… │
│ (ZeroPadding2D)     │ 64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_2           │ (None, 56, 56,    │        576 │ conv_pad_2[0][0]  │
│ (DepthwiseConv2D)   │ 64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_2_bn        │ (None, 56, 56,    │        256 │ conv_dw_2[0][0]   │
│ (BatchNormalizatio… │ 64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_2_relu      │ (None, 56, 56,    │          0 │ conv_dw_2_bn[0][… │
│ (ReLU)              │ 64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_2 (Conv2D)  │ (None, 56, 56,    │      8,192 │ conv_dw_2_relu[0… │
│                     │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_2_bn        │ (None, 56, 56,    │        512 │ conv_pw_2[0][0]   │
│ (BatchNormalizatio… │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_2_relu      │ (None, 56, 56,    │          0 │ conv_pw_2_bn[0][… │
│ (ReLU)              │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_3           │ (None, 56, 56,    │      1,152 │ conv_pw_2_relu[0… │
│ (DepthwiseConv2D)   │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_3_bn        │ (None, 56, 56,    │        512 │ conv_dw_3[0][0]   │
│ (BatchNormalizatio… │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_3_relu      │ (None, 56, 56,    │          0 │ conv_dw_3_bn[0][… │
│ (ReLU)              │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_3 (Conv2D)  │ (None, 56, 56,    │     16,384 │ conv_dw_3_relu[0… │
│                     │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_3_bn        │ (None, 56, 56,    │        512 │ conv_pw_3[0][0]   │
│ (BatchNormalizatio… │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_3_relu      │ (None, 56, 56,    │          0 │ conv_pw_3_bn[0][… │
│ (ReLU)              │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pad_4          │ (None, 57, 57,    │          0 │ conv_pw_3_relu[0… │
│ (ZeroPadding2D)     │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_4           │ (None, 28, 28,    │      1,152 │ conv_pad_4[0][0]  │
│ (DepthwiseConv2D)   │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_4_bn        │ (None, 28, 28,    │        512 │ conv_dw_4[0][0]   │
│ (BatchNormalizatio… │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_4_relu      │ (None, 28, 28,    │          0 │ conv_dw_4_bn[0][… │
│ (ReLU)              │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_4 (Conv2D)  │ (None, 28, 28,    │     32,768 │ conv_dw_4_relu[0… │
│                     │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_4_bn        │ (None, 28, 28,    │      1,024 │ conv_pw_4[0][0]   │
│ (BatchNormalizatio… │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_4_relu      │ (None, 28, 28,    │          0 │ conv_pw_4_bn[0][… │
│ (ReLU)              │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_5           │ (None, 28, 28,    │      2,304 │ conv_pw_4_relu[0… │
│ (DepthwiseConv2D)   │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_5_bn        │ (None, 28, 28,    │      1,024 │ conv_dw_5[0][0]   │
│ (BatchNormalizatio… │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_5_relu      │ (None, 28, 28,    │          0 │ conv_dw_5_bn[0][… │
│ (ReLU)              │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_5 (Conv2D)  │ (None, 28, 28,    │     65,536 │ conv_dw_5_relu[0… │
│                     │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_5_bn        │ (None, 28, 28,    │      1,024 │ conv_pw_5[0][0]   │
│ (BatchNormalizatio… │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_5_relu      │ (None, 28, 28,    │          0 │ conv_pw_5_bn[0][… │
│ (ReLU)              │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pad_6          │ (None, 29, 29,    │          0 │ conv_pw_5_relu[0… │
│ (ZeroPadding2D)     │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_6           │ (None, 14, 14,    │      2,304 │ conv_pad_6[0][0]  │
│ (DepthwiseConv2D)   │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_6_bn        │ (None, 14, 14,    │      1,024 │ conv_dw_6[0][0]   │
│ (BatchNormalizatio… │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_6_relu      │ (None, 14, 14,    │          0 │ conv_dw_6_bn[0][… │
│ (ReLU)              │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_6 (Conv2D)  │ (None, 14, 14,    │    131,072 │ conv_dw_6_relu[0… │
│                     │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_6_bn        │ (None, 14, 14,    │      2,048 │ conv_pw_6[0][0]   │
│ (BatchNormalizatio… │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_6_relu      │ (None, 14, 14,    │          0 │ conv_pw_6_bn[0][… │
│ (ReLU)              │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_7           │ (None, 14, 14,    │      4,608 │ conv_pw_6_relu[0… │
│ (DepthwiseConv2D)   │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_7_bn        │ (None, 14, 14,    │      2,048 │ conv_dw_7[0][0]   │
│ (BatchNormalizatio… │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_7_relu      │ (None, 14, 14,    │          0 │ conv_dw_7_bn[0][… │
│ (ReLU)              │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_7 (Conv2D)  │ (None, 14, 14,    │    262,144 │ conv_dw_7_relu[0… │
│                     │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_7_bn        │ (None, 14, 14,    │      2,048 │ conv_pw_7[0][0]   │
│ (BatchNormalizatio… │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_7_relu      │ (None, 14, 14,    │          0 │ conv_pw_7_bn[0][… │
│ (ReLU)              │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_8           │ (None, 14, 14,    │      4,608 │ conv_pw_7_relu[0… │
│ (DepthwiseConv2D)   │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_8_bn        │ (None, 14, 14,    │      2,048 │ conv_dw_8[0][0]   │
│ (BatchNormalizatio… │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_8_relu      │ (None, 14, 14,    │          0 │ conv_dw_8_bn[0][… │
│ (ReLU)              │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_8 (Conv2D)  │ (None, 14, 14,    │    262,144 │ conv_dw_8_relu[0… │
│                     │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_8_bn        │ (None, 14, 14,    │      2,048 │ conv_pw_8[0][0]   │
│ (BatchNormalizatio… │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_8_relu      │ (None, 14, 14,    │          0 │ conv_pw_8_bn[0][… │
│ (ReLU)              │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_9           │ (None, 14, 14,    │      4,608 │ conv_pw_8_relu[0… │
│ (DepthwiseConv2D)   │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_9_bn        │ (None, 14, 14,    │      2,048 │ conv_dw_9[0][0]   │
│ (BatchNormalizatio… │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_9_relu      │ (None, 14, 14,    │          0 │ conv_dw_9_bn[0][… │
│ (ReLU)              │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_9 (Conv2D)  │ (None, 14, 14,    │    262,144 │ conv_dw_9_relu[0… │
│                     │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_9_bn        │ (None, 14, 14,    │      2,048 │ conv_pw_9[0][0]   │
│ (BatchNormalizatio… │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_9_relu      │ (None, 14, 14,    │          0 │ conv_pw_9_bn[0][… │
│ (ReLU)              │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_10          │ (None, 14, 14,    │      4,608 │ conv_pw_9_relu[0… │
│ (DepthwiseConv2D)   │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_10_bn       │ (None, 14, 14,    │      2,048 │ conv_dw_10[0][0]  │
│ (BatchNormalizatio… │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_10_relu     │ (None, 14, 14,    │          0 │ conv_dw_10_bn[0]… │
│ (ReLU)              │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_10 (Conv2D) │ (None, 14, 14,    │    262,144 │ conv_dw_10_relu[… │
│                     │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_10_bn       │ (None, 14, 14,    │      2,048 │ conv_pw_10[0][0]  │
│ (BatchNormalizatio… │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_10_relu     │ (None, 14, 14,    │          0 │ conv_pw_10_bn[0]… │
│ (ReLU)              │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_11          │ (None, 14, 14,    │      4,608 │ conv_pw_10_relu[… │
│ (DepthwiseConv2D)   │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_11_bn       │ (None, 14, 14,    │      2,048 │ conv_dw_11[0][0]  │
│ (BatchNormalizatio… │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_11_relu     │ (None, 14, 14,    │          0 │ conv_dw_11_bn[0]… │
│ (ReLU)              │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_11 (Conv2D) │ (None, 14, 14,    │    262,144 │ conv_dw_11_relu[… │
│                     │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_11_bn       │ (None, 14, 14,    │      2,048 │ conv_pw_11[0][0]  │
│ (BatchNormalizatio… │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_11_relu     │ (None, 14, 14,    │          0 │ conv_pw_11_bn[0]… │
│ (ReLU)              │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pad_12         │ (None, 15, 15,    │          0 │ conv_pw_11_relu[… │
│ (ZeroPadding2D)     │ 512)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_12          │ (None, 7, 7, 512) │      4,608 │ conv_pad_12[0][0] │
│ (DepthwiseConv2D)   │                   │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_12_bn       │ (None, 7, 7, 512) │      2,048 │ conv_dw_12[0][0]  │
│ (BatchNormalizatio… │                   │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_12_relu     │ (None, 7, 7, 512) │          0 │ conv_dw_12_bn[0]… │
│ (ReLU)              │                   │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_12 (Conv2D) │ (None, 7, 7,      │    524,288 │ conv_dw_12_relu[… │
│                     │ 1024)             │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_12_bn       │ (None, 7, 7,      │      4,096 │ conv_pw_12[0][0]  │
│ (BatchNormalizatio… │ 1024)             │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_12_relu     │ (None, 7, 7,      │          0 │ conv_pw_12_bn[0]… │
│ (ReLU)              │ 1024)             │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_13          │ (None, 7, 7,      │      9,216 │ conv_pw_12_relu[… │
│ (DepthwiseConv2D)   │ 1024)             │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_13_bn       │ (None, 7, 7,      │      4,096 │ conv_dw_13[0][0]  │
│ (BatchNormalizatio… │ 1024)             │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_dw_13_relu     │ (None, 7, 7,      │          0 │ conv_dw_13_bn[0]… │
│ (ReLU)              │ 1024)             │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_13 (Conv2D) │ (None, 7, 7,      │  1,048,576 │ conv_dw_13_relu[… │
│                     │ 1024)             │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_13_bn       │ (None, 7, 7,      │      4,096 │ conv_pw_13[0][0]  │
│ (BatchNormalizatio… │ 1024)             │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv_pw_13_relu     │ (None, 7, 7,      │          0 │ conv_pw_13_bn[0]… │
│ (ReLU)              │ 1024)             │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ up_sampling2d       │ (None, 14, 14,    │          0 │ conv_pw_13_relu[… │
│ (UpSampling2D)      │ 1024)             │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ concatenate         │ (None, 14, 14,    │          0 │ up_sampling2d[0]… │
│ (Concatenate)       │ 1536)             │            │ conv_pw_11_relu[… │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_6_1_conv       │ (None, 14, 14,    │  3,539,200 │ concatenate[0][0] │
│ (Conv2D)            │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_6_1BatchNorma… │ (None, 14, 14,    │      1,024 │ Conv_6_1_conv[0]… │
│ (BatchNormalizatio… │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_6_1Activation… │ (None, 14, 14,    │          0 │ Conv_6_1BatchNor… │
│ (Activation)        │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_6_2_conv       │ (None, 14, 14,    │    590,080 │ Conv_6_1Activati… │
│ (Conv2D)            │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_6_2BatchNorma… │ (None, 14, 14,    │      1,024 │ Conv_6_2_conv[0]… │
│ (BatchNormalizatio… │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_6_2Activation… │ (None, 14, 14,    │          0 │ Conv_6_2BatchNor… │
│ (Activation)        │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ up_sampling2d_1     │ (None, 28, 28,    │          0 │ Conv_6_2Activati… │
│ (UpSampling2D)      │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ concatenate_1       │ (None, 28, 28,    │          0 │ up_sampling2d_1[… │
│ (Concatenate)       │ 512)              │            │ conv_pw_5_relu[0… │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_7_1_conv       │ (None, 28, 28,    │  1,179,904 │ concatenate_1[0]… │
│ (Conv2D)            │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_7_1BatchNorma… │ (None, 28, 28,    │      1,024 │ Conv_7_1_conv[0]… │
│ (BatchNormalizatio… │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_7_1Activation… │ (None, 28, 28,    │          0 │ Conv_7_1BatchNor… │
│ (Activation)        │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_7_2_conv       │ (None, 28, 28,    │    590,080 │ Conv_7_1Activati… │
│ (Conv2D)            │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_7_2BatchNorma… │ (None, 28, 28,    │      1,024 │ Conv_7_2_conv[0]… │
│ (BatchNormalizatio… │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_7_2Activation… │ (None, 28, 28,    │          0 │ Conv_7_2BatchNor… │
│ (Activation)        │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ up_sampling2d_2     │ (None, 56, 56,    │          0 │ Conv_7_2Activati… │
│ (UpSampling2D)      │ 256)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ concatenate_2       │ (None, 56, 56,    │          0 │ up_sampling2d_2[… │
│ (Concatenate)       │ 384)              │            │ conv_pw_3_relu[0… │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_8_1_conv       │ (None, 56, 56,    │    663,744 │ concatenate_2[0]… │
│ (Conv2D)            │ 192)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_8_1BatchNorma… │ (None, 56, 56,    │        768 │ Conv_8_1_conv[0]… │
│ (BatchNormalizatio… │ 192)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_8_1Activation… │ (None, 56, 56,    │          0 │ Conv_8_1BatchNor… │
│ (Activation)        │ 192)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_8_2_conv       │ (None, 56, 56,    │    221,312 │ Conv_8_1Activati… │
│ (Conv2D)            │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_8_2BatchNorma… │ (None, 56, 56,    │        512 │ Conv_8_2_conv[0]… │
│ (BatchNormalizatio… │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_8_2Activation… │ (None, 56, 56,    │          0 │ Conv_8_2BatchNor… │
│ (Activation)        │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ up_sampling2d_3     │ (None, 112, 112,  │          0 │ Conv_8_2Activati… │
│ (UpSampling2D)      │ 128)              │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ concatenate_3       │ (None, 112, 112,  │          0 │ up_sampling2d_3[… │
│ (Concatenate)       │ 192)              │            │ conv_pw_1_relu[0… │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_9_1_conv       │ (None, 112, 112,  │    165,984 │ concatenate_3[0]… │
│ (Conv2D)            │ 96)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_9_1BatchNorma… │ (None, 112, 112,  │        384 │ Conv_9_1_conv[0]… │
│ (BatchNormalizatio… │ 96)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_9_1Activation… │ (None, 112, 112,  │          0 │ Conv_9_1BatchNor… │
│ (Activation)        │ 96)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_9_2_conv       │ (None, 112, 112,  │     55,360 │ Conv_9_1Activati… │
│ (Conv2D)            │ 64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_9_2BatchNorma… │ (None, 112, 112,  │        256 │ Conv_9_2_conv[0]… │
│ (BatchNormalizatio… │ 64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_9_2Activation… │ (None, 112, 112,  │          0 │ Conv_9_2BatchNor… │
│ (Activation)        │ 64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ up_sampling2d_4     │ (None, 224, 224,  │          0 │ Conv_9_2Activati… │
│ (UpSampling2D)      │ 64)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ concatenate_4       │ (None, 224, 224,  │          0 │ up_sampling2d_4[… │
│ (Concatenate)       │ 67)               │            │ input_layer[0][0] │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_10_1_conv      │ (None, 224, 224,  │     28,992 │ concatenate_4[0]… │
│ (Conv2D)            │ 48)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_10_1BatchNorm… │ (None, 224, 224,  │        192 │ Conv_10_1_conv[0… │
│ (BatchNormalizatio… │ 48)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_10_1Activatio… │ (None, 224, 224,  │          0 │ Conv_10_1BatchNo… │
│ (Activation)        │ 48)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_10_2_conv      │ (None, 224, 224,  │     13,856 │ Conv_10_1Activat… │
│ (Conv2D)            │ 32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_10_2BatchNorm… │ (None, 224, 224,  │        128 │ Conv_10_2_conv[0… │
│ (BatchNormalizatio… │ 32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ Conv_10_2Activatio… │ (None, 224, 224,  │          0 │ Conv_10_2BatchNo… │
│ (Activation)        │ 32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ spatial_dropout2d   │ (None, 224, 224,  │          0 │ Conv_10_2Activat… │
│ (SpatialDropout2D)  │ 32)               │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ conv2d (Conv2D)     │ (None, 224, 224,  │         33 │ spatial_dropout2… │
│                     │ 1)                │            │                   │
├─────────────────────┼───────────────────┼────────────┼───────────────────┤
│ reshape (Reshape)   │ (None, 224, 224)  │          0 │ conv2d[0][0]      │
└─────────────────────┴───────────────────┴────────────┴───────────────────┘
 Total params: 10,283,745 (39.23 MB)
 Trainable params: 10,258,689 (39.13 MB)
 Non-trainable params: 25,056 (97.88 KB)
In [31]:
# Create a function to calculate dice_coefficient
# Defining dice coefficient function

def dice_coefficient(y_true, y_pred):
    numerator = 2 * tf.reduce_sum(y_true * y_pred)
    denominator = tf.reduce_sum(y_true + y_pred)

    return numerator / (denominator + tf.keras.backend.epsilon())

Observations:

  • The function dice_coeeficient is created successfully.
In [32]:
# Defining loss function

def loss(y_true, y_pred):
    return binary_crossentropy(y_true, y_pred) - log(dice_coefficient(y_true, y_pred) + epsilon())

Observations:

  • Loss function created successfully

**Complie the model using below parameters**

  • loss: using the loss function defined above
  • optimizer: using Adam optimizer
  • metrics: using dice_coefficient function defined above
In [33]:
# Compile the model
adam = Adam(learning_rate = 1e-4, beta_1 = 0.9, beta_2 = 0.999, decay = 0.0, amsgrad = False)
model.compile(loss=loss, optimizer = adam, metrics=[dice_coefficient])

Observations:

  • Model is compiled successfully.
In [34]:
# Defining the callbacks
checkpoint = ModelCheckpoint("model-{loss:.2f}.weights.h5", monitor = "loss", verbose = 1, save_best_only = True, save_weights_only = True, mode = "min")
stop = EarlyStopping(monitor = "loss", patience = 5, mode = "min")
reduce_lr = ReduceLROnPlateau(monitor = "loss", factor = 0.2, patience = 5, min_lr = 1e-6, verbose = 1, mode = "min")

Observations:

  • We have defined the checkpoints, early checkpoints and reduced learning rate.
In [35]:
# Train the model using model.fit()
model.fit(XTrain, YTrain, epochs = 30, batch_size = 1, callbacks = [checkpoint, reduce_lr, stop])
Epoch 1/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 269ms/step - dice_coefficient: 0.3164 - loss: 2.0651
Epoch 1: loss improved from inf to 1.84637, saving model to model-1.85.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 81s 270ms/step - dice_coefficient: 0.3164 - loss: 2.0643 - learning_rate: 1.0000e-04
Epoch 2/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 273ms/step - dice_coefficient: 0.3853 - loss: 1.4872
Epoch 2: loss improved from 1.84637 to 1.39649, saving model to model-1.40.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 75s 274ms/step - dice_coefficient: 0.3854 - loss: 1.4869 - learning_rate: 1.0000e-04
Epoch 3/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 321ms/step - dice_coefficient: 0.4559 - loss: 1.2088
Epoch 3: loss improved from 1.39649 to 1.20340, saving model to model-1.20.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 88s 321ms/step - dice_coefficient: 0.4559 - loss: 1.2088 - learning_rate: 1.0000e-04
Epoch 4/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 286ms/step - dice_coefficient: 0.5010 - loss: 1.0797
Epoch 4: loss improved from 1.20340 to 1.02137, saving model to model-1.02.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 79s 287ms/step - dice_coefficient: 0.5011 - loss: 1.0794 - learning_rate: 1.0000e-04
Epoch 5/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 293ms/step - dice_coefficient: 0.5442 - loss: 0.9552
Epoch 5: loss improved from 1.02137 to 0.88953, saving model to model-0.89.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 81s 294ms/step - dice_coefficient: 0.5443 - loss: 0.9549 - learning_rate: 1.0000e-04
Epoch 6/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 279ms/step - dice_coefficient: 0.5727 - loss: 0.8430
Epoch 6: loss improved from 0.88953 to 0.76652, saving model to model-0.77.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 77s 280ms/step - dice_coefficient: 0.5728 - loss: 0.8427 - learning_rate: 1.0000e-04
Epoch 7/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 278ms/step - dice_coefficient: 0.6447 - loss: 0.6264
Epoch 7: loss improved from 0.76652 to 0.67844, saving model to model-0.68.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 77s 279ms/step - dice_coefficient: 0.6447 - loss: 0.6266 - learning_rate: 1.0000e-04
Epoch 8/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 287ms/step - dice_coefficient: 0.6823 - loss: 0.6141
Epoch 8: loss improved from 0.67844 to 0.60382, saving model to model-0.60.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 79s 288ms/step - dice_coefficient: 0.6823 - loss: 0.6141 - learning_rate: 1.0000e-04
Epoch 9/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 300ms/step - dice_coefficient: 0.6977 - loss: 0.5169
Epoch 9: loss improved from 0.60382 to 0.53079, saving model to model-0.53.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 83s 301ms/step - dice_coefficient: 0.6977 - loss: 0.5170 - learning_rate: 1.0000e-04
Epoch 10/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 278ms/step - dice_coefficient: 0.7330 - loss: 0.4848
Epoch 10: loss improved from 0.53079 to 0.47512, saving model to model-0.48.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 77s 278ms/step - dice_coefficient: 0.7330 - loss: 0.4848 - learning_rate: 1.0000e-04
Epoch 11/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 294ms/step - dice_coefficient: 0.7549 - loss: 0.4811
Epoch 11: loss improved from 0.47512 to 0.42312, saving model to model-0.42.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 81s 295ms/step - dice_coefficient: 0.7549 - loss: 0.4809 - learning_rate: 1.0000e-04
Epoch 12/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 276ms/step - dice_coefficient: 0.7814 - loss: 0.4207
Epoch 12: loss improved from 0.42312 to 0.36818, saving model to model-0.37.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 76s 277ms/step - dice_coefficient: 0.7814 - loss: 0.4205 - learning_rate: 1.0000e-04
Epoch 13/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 294ms/step - dice_coefficient: 0.8055 - loss: 0.3017
Epoch 13: loss improved from 0.36818 to 0.33132, saving model to model-0.33.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 81s 295ms/step - dice_coefficient: 0.8055 - loss: 0.3018 - learning_rate: 1.0000e-04
Epoch 14/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 302ms/step - dice_coefficient: 0.8259 - loss: 0.2858
Epoch 14: loss improved from 0.33132 to 0.30414, saving model to model-0.30.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 83s 302ms/step - dice_coefficient: 0.8259 - loss: 0.2859 - learning_rate: 1.0000e-04
Epoch 15/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 320ms/step - dice_coefficient: 0.8439 - loss: 0.2391
Epoch 15: loss improved from 0.30414 to 0.28087, saving model to model-0.28.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 88s 321ms/step - dice_coefficient: 0.8439 - loss: 0.2393 - learning_rate: 1.0000e-04
Epoch 16/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 303ms/step - dice_coefficient: 0.8338 - loss: 0.2591
Epoch 16: loss improved from 0.28087 to 0.26130, saving model to model-0.26.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 83s 303ms/step - dice_coefficient: 0.8339 - loss: 0.2591 - learning_rate: 1.0000e-04
Epoch 17/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 313ms/step - dice_coefficient: 0.8615 - loss: 0.2557
Epoch 17: loss improved from 0.26130 to 0.24170, saving model to model-0.24.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 86s 314ms/step - dice_coefficient: 0.8615 - loss: 0.2556 - learning_rate: 1.0000e-04
Epoch 18/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 298ms/step - dice_coefficient: 0.8769 - loss: 0.1989
Epoch 18: loss improved from 0.24170 to 0.22587, saving model to model-0.23.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 82s 299ms/step - dice_coefficient: 0.8769 - loss: 0.1990 - learning_rate: 1.0000e-04
Epoch 19/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 286ms/step - dice_coefficient: 0.8735 - loss: 0.2146
Epoch 19: loss improved from 0.22587 to 0.21073, saving model to model-0.21.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 79s 286ms/step - dice_coefficient: 0.8736 - loss: 0.2146 - learning_rate: 1.0000e-04
Epoch 20/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 282ms/step - dice_coefficient: 0.8766 - loss: 0.2190
Epoch 20: loss did not improve from 0.21073
275/275 ━━━━━━━━━━━━━━━━━━━━ 77s 282ms/step - dice_coefficient: 0.8767 - loss: 0.2189 - learning_rate: 1.0000e-04
Epoch 21/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 280ms/step - dice_coefficient: 0.8744 - loss: 0.4694
Epoch 21: loss did not improve from 0.21073
275/275 ━━━━━━━━━━━━━━━━━━━━ 77s 280ms/step - dice_coefficient: 0.8744 - loss: 0.4685 - learning_rate: 1.0000e-04
Epoch 22/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 277ms/step - dice_coefficient: 0.8858 - loss: 0.2445
Epoch 22: loss did not improve from 0.21073
275/275 ━━━━━━━━━━━━━━━━━━━━ 76s 277ms/step - dice_coefficient: 0.8858 - loss: 0.2444 - learning_rate: 1.0000e-04
Epoch 23/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 274ms/step - dice_coefficient: 0.9001 - loss: 0.1742
Epoch 23: loss improved from 0.21073 to 0.19362, saving model to model-0.19.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 76s 275ms/step - dice_coefficient: 0.9001 - loss: 0.1742 - learning_rate: 1.0000e-04
Epoch 24/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 290ms/step - dice_coefficient: 0.9020 - loss: 0.1637
Epoch 24: loss improved from 0.19362 to 0.17617, saving model to model-0.18.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 80s 291ms/step - dice_coefficient: 0.9020 - loss: 0.1638 - learning_rate: 1.0000e-04
Epoch 25/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 299ms/step - dice_coefficient: 0.9193 - loss: 0.1895
Epoch 25: loss improved from 0.17617 to 0.16284, saving model to model-0.16.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 82s 300ms/step - dice_coefficient: 0.9193 - loss: 0.1894 - learning_rate: 1.0000e-04
Epoch 26/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 295ms/step - dice_coefficient: 0.9406 - loss: 0.1117
Epoch 26: loss improved from 0.16284 to 0.14706, saving model to model-0.15.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 81s 295ms/step - dice_coefficient: 0.9406 - loss: 0.1118 - learning_rate: 1.0000e-04
Epoch 27/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 295ms/step - dice_coefficient: 0.9299 - loss: 0.1166
Epoch 27: loss improved from 0.14706 to 0.14598, saving model to model-0.15.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 81s 295ms/step - dice_coefficient: 0.9299 - loss: 0.1167 - learning_rate: 1.0000e-04
Epoch 28/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 278ms/step - dice_coefficient: 0.9327 - loss: 0.1238
Epoch 28: loss improved from 0.14598 to 0.14391, saving model to model-0.14.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 77s 279ms/step - dice_coefficient: 0.9327 - loss: 0.1239 - learning_rate: 1.0000e-04
Epoch 29/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 271ms/step - dice_coefficient: 0.9435 - loss: 0.1353
Epoch 29: loss improved from 0.14391 to 0.13305, saving model to model-0.13.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 75s 272ms/step - dice_coefficient: 0.9435 - loss: 0.1353 - learning_rate: 1.0000e-04
Epoch 30/30
275/275 ━━━━━━━━━━━━━━━━━━━━ 0s 287ms/step - dice_coefficient: 0.9431 - loss: 0.1236
Epoch 30: loss improved from 0.13305 to 0.12929, saving model to model-0.13.weights.h5
275/275 ━━━━━━━━━━━━━━━━━━━━ 79s 288ms/step - dice_coefficient: 0.9431 - loss: 0.1236 - learning_rate: 1.0000e-04
Out[35]:
<keras.src.callbacks.history.History at 0x37ca3d490>

Observations:

  • epochs: 30
  • batch_size: 1
  • callbacks: using the callbacks defined above
  • The best model weights based on the metrics was model-0.13.weights.h5

b) Evaluate and share insights on performance of the model ¶

In [36]:
# Use the model.evaluate() to evaluate the model
model.evaluate(XTest, YTest, verbose = 1)
4/4 ━━━━━━━━━━━━━━━━━━━━ 7s 2s/step - dice_coefficient: 0.6307 - loss: 0.8664
Out[36]:
[0.8698218464851379, 0.6220571994781494]

Observations:

  • The dice_coefficient is 0.6220571994781494 and loss is 0.8698218464851379.
  • The metrics on test data is lower than the training data.
In [37]:
# Load previous model weight
WEIGHTS_FILE = "model-0.13.weights.h5"
learned_model = create_model()
learned_model.load_weights(WEIGHTS_FILE)
YPred = learned_model.predict(XTest, verbose = 1)
4/4 ━━━━━━━━━━━━━━━━━━━━ 8s 2s/step

Observations:

  • The last stored weight model-0.13.weights.h5 was used successfully.
In [38]:
# Validate YPred against YTest with the first value
# Here we are comparing the image index 15

# Print the XTest[15]
fig = plt.figure(figsize = (15, 10))
ax = fig.add_subplot(1, 1, 1)
plt.axis("off")
plt.title("XTest Image ")
plt.imshow(XTest[15])
plt.show()

# Print the YTest[15]
fig = plt.figure(figsize = (15, 10))
ax = fig.add_subplot(1, 1, 1)
plt.axis("off")
plt.title("YTest Image ")
plt.imshow(YTest[15])
plt.show()

# Print the YPred[15]
fig = plt.figure(figsize = (15, 10))
ax = fig.add_subplot(1, 1, 1)
plt.axis("off")
plt.title("YPred Image ")
plt.imshow(YPred[15])
plt.show()
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image

Observations:

  • The prediction of location of the faces matched the actual location of the faces.
  • The model is efficient.

c) Predict and visualize the masks for the test images ¶

In [39]:
# For a sample image
n = random.randint(0, TestSize)
image = cv2.resize(XTest[n], dsize = (IMAGE_HEIGHT, IMAGE_WIDTH), interpolation = cv2.INTER_CUBIC)
pred_mask = cv2.resize(1.0 * (YPred[n] > 0.1), (IMAGE_WIDTH, IMAGE_HEIGHT))

image2 = image
image2[:, :, 0] = pred_mask * image[:, :, 0]
image2[:, :, 1] = pred_mask * image[:, :, 1]
image2[:, :, 2] = pred_mask * image[:, :, 2]
out_image = image2

fig = plt.figure(figsize = (15, 7.2))
ax = fig.add_subplot(1, 1, 1)
plt.axis("off")
plt.title("Image Index " + str(n))
plt.imshow(out_image)
plt.show()
No description has been provided for this image
In [40]:
fig = plt.figure(figsize = (15, 7.2))
ax = fig.add_subplot(1, 1, 1)
plt.axis("off")
plt.title("Image Index " + str(n))
plt.imshow(pred_mask, alpha = 1)
plt.show()
No description has been provided for this image

Observations:

  • We used model weights (in this case - model-0.13.weights.h5) on our test data to predict the mask around a face.
  • As seen in the above example (for image = 15 of our test data), our model does a good job in predicting the masks.
In [113]:
# Import and display Benedict+Cumberbatch9.jpg

Benedict_Cumberbatch_Image = cv2.imread("Benedict+Cumberbatch9.jpg")
Benedict_Cumberbatch_Image_RGB = cv2.cvtColor(Benedict_Cumberbatch_Image, cv2.COLOR_BGR2RGB)
fig = plt.figure(figsize = (15, 10))
ax = fig.add_subplot(1, 1, 1)
plt.axis("off")
plt.imshow(Benedict_Cumberbatch_Image_RGB)
plt.show()
No description has been provided for this image
In [ ]:
 
In [114]:
# Import and display Dwayne+Johnson4.jpg
Dwayne_Johnson_Image = cv2.imread("Dwayne+Johnson4.jpg")
Dwayne_Johnson_Image_RGB = cv2.cvtColor(Dwayne_Johnson_Image, cv2.COLOR_BGR2RGB)
fig = plt.figure(figsize = (15, 10))
ax = fig.add_subplot(1, 1, 1)
plt.axis("off")
plt.imshow(Dwayne_Johnson_Image_RGB)
plt.show()
No description has been provided for this image
In [137]:
BCImage = cv2.resize(Benedict_Cumberbatch_Image_RGB, dsize = (IMAGE_HEIGHT, IMAGE_WIDTH), interpolation = cv2.INTER_CUBIC)
DJImage = cv2.resize(Dwayne_Johnson_Image_RGB, dsize = (IMAGE_HEIGHT, IMAGE_WIDTH), interpolation = cv2.INTER_CUBIC)
ImageX = []
ImageX.append(BCImage)
ImageX.append(DJImage)
In [138]:
ImageDataX = np.zeros((2, IMAGE_HEIGHT, IMAGE_WIDTH, 3))
In [139]:
for i in range(0, 2):
    TestImage = cv2.resize(ImageX[i], dsize = (IMAGE_HEIGHT, IMAGE_WIDTH), interpolation = cv2.INTER_CUBIC)
    ImageDataX[i] = preprocess_input(np.array(TestImage, dtype = np.float32))
In [140]:
TestPred = learned_model.predict(ImageDataX, verbose = 1)
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 313ms/step
In [141]:
for i in range(0, 2):
    fig = plt.figure(figsize = (15, 10))
    ax = fig.add_subplot(1, 1, 1)
    plt.axis("off")
    plt.imshow(TestPred[i])
plt.show()
No description has been provided for this image
No description has been provided for this image

Insights:

  • We used the trained model MobileNet and added the UNET layers to train, fit and evaluate the model.
  • Here the model is compiled with binary cross entropy as loss, Adam Optimizer as the optimizer and Dice Coefficient as the metric.
  • We used Model Checkpoint, Early Stopping and ReduceLROnPlateau for callbacks.
  • We used 70-30 split to divide the images between train and test data.
  • After training the model for 30 epochs on training set, the best loss that I had acheived was 0.11 on loss and a dice coefficient of 0.96.
  • The training Data Performance: Dice Coefficient (0.9597): Very high, suggesting the model performs well on the training data. The Loss (0.06): Very low, indicating the model fits the training data well.
  • Test Data Performance: Dice Coefficient (0.6466) and this is significantly lower compared to the training data, suggesting poor generalization. Loss (0.8639): High, indicating the model struggles to make accurate predictions on the test data.
  • Overfitting: The model has learned the training data too well (memorizing specific patterns), resulting in excellent performance on training data but failing to generalize to unseen test data.
  • Poor Generalization: The large gap between training and test performance metrics suggests the model has not learned a robust representation that works across different data distributions.

Part I: Predicting Face Masks from Images ¶

a) Write a loop which will iterate through all the images in the ‘training_images’ folder and detect the faces present on all the images.

→ Define an algorithm which can access each and every image from the training images folder and can able to detect all the faces present on the images.

b) From the same loop above, extract metadata of the faces and write into a DataFrame. → Construct a dataframe extracting metadata of the faces using the algorithm defined above.

a) Import images from folder ‘training_images’ ¶

In [25]:
# Write down the image directory path that should be loaded. 
# training_images-20211126T092819Z-001.zip is laready unzipped and the training_images directory is already created.
# The directory training_images contains 1081 distinct images 9 additional duplicate images.

ImageFolder = "training_images"
DirList = next(os.walk(ImageFolder))[2]
print(DirList)
['real_00251.jpg', 'real_00537.jpg', 'real_00523.jpg', 'real_00245.jpg', 'real_00279.jpg', 'real_00292.jpg', 'real_00286.jpg', 'real_00735.jpg', 'real_00053.jpg', 'real_00047.jpg', 'real_00721.jpg', 'real_00709.jpg', 'real_00090.jpg', 'real_00084.jpg', 'real_00912.jpg', 'real_00906.jpg', 'real_00641.jpg', 'real_00899.jpg', 'real_00127.jpg', 'real_00133.jpg', 'real_00655.jpg', 'real_00669.jpg', 'real_00682.jpg', 'real_00696.jpg', 'real_00866.jpg', 'real_00872.jpg', 'real_00325.jpg', 'real_00443.jpg', 'real_00457.jpg', 'real_00331.jpg', 'real_00319.jpg', 'real_01007.jpg', 'real_00331(1).jpg', 'real_01013.jpg', 'real_00480.jpg', 'real_00494.jpg', 'real_00319(1).jpg', 'real_00495.jpg', 'real_00481.jpg', 'real_01012.jpg', 'real_01006.jpg', 'real_00318.jpg', 'real_00456.jpg', 'real_00330.jpg', 'real_00324.jpg', 'real_00442.jpg', 'real_00456(1).jpg', 'real_00873.jpg', 'real_00867.jpg', 'real_00697.jpg', 'real_00683.jpg', 'real_00668.jpg', 'real_00132.jpg', 'real_00654.jpg', 'real_00898.jpg', 'real_00640.jpg', 'real_00126.jpg', 'real_00907.jpg', 'real_00913.jpg', 'real_00085.jpg', 'real_00091.jpg', 'real_00708.jpg', 'real_00046.jpg', 'real_00720.jpg', 'real_00734.jpg', 'real_00052.jpg', 'real_00287.jpg', 'real_00293.jpg', 'real_00278.jpg', 'real_00522.jpg', 'real_00244.jpg', 'real_00250.jpg', 'real_00536.jpg', 'real_00246.jpg', 'real_00520.jpg', 'real_00534.jpg', 'real_00252.jpg', 'real_00508.jpg', 'real_00285.jpg', 'real_00291.jpg', 'real_00722.jpg', 'real_00044.jpg', 'real_00050.jpg', 'real_00736.jpg', 'real_00078.jpg', 'real_00939.jpg', 'real_00087.jpg', 'real_00093.jpg', 'real_00905.jpg', 'real_00911.jpg', 'real_00656.jpg', 'real_00130.jpg', 'real_00124.jpg', 'real_00642.jpg', 'real_00118.jpg', 'real_00695.jpg', 'real_00481(1).jpg', 'real_00859.jpg', 'real_00681.jpg', 'real_00871.jpg', 'real_00865.jpg', 'real_00332.jpg', 'real_00454.jpg', 'real_00440.jpg', 'real_00326.jpg', 'real_01038.jpg', 'real_01010.jpg', 'real_00468.jpg', 'real_01004.jpg', 'real_00497.jpg', 'real_00483.jpg', 'real_00482.jpg', 'real_00496.jpg', 'real_01005.jpg', 'real_01011.jpg', 'real_00469.jpg', 'real_00441.jpg', 'real_01039.jpg', 'real_00327.jpg', 'real_00333.jpg', 'real_00455.jpg', 'real_00864.jpg', 'real_00870.jpg', 'real_00680.jpg', 'real_00858.jpg', 'real_00694.jpg', 'real_00119.jpg', 'real_00125.jpg', 'real_00643.jpg', 'real_00657.jpg', 'real_00131.jpg', 'real_00910.jpg', 'real_00904.jpg', 'real_00092.jpg', 'real_00938.jpg', 'real_00086.jpg', 'real_00079.jpg', 'real_00051.jpg', 'real_00737.jpg', 'real_00723.jpg', 'real_00045.jpg', 'real_00290.jpg', 'real_00284.jpg', 'real_00509.jpg', 'real_00535.jpg', 'real_00253.jpg', 'real_00247.jpg', 'real_00521.jpg', 'real_00519.jpg', 'real_00525.jpg', 'real_00243.jpg', 'real_00257.jpg', 'real_00531.jpg', 'real_00280.jpg', 'real_00294.jpg', 'real_00069.jpg', 'real_00041.jpg', 'real_00727.jpg', 'real_00733.jpg', 'real_00055.jpg', 'real_00900.jpg', 'real_00914.jpg', 'real_00082.jpg', 'real_00928.jpg', 'real_00096.jpg', 'real_00109.jpg', 'real_00135.jpg', 'real_00653.jpg', 'real_00647.jpg', 'real_00121.jpg', 'real_00874.jpg', 'real_00860.jpg', 'real_00848.jpg', 'real_00690.jpg', 'real_00684.jpg', 'real_01015.jpg', 'real_01001.jpg', 'real_00479.jpg', 'real_00451.jpg', 'real_00337.jpg', 'real_01029.jpg', 'real_00323.jpg', 'real_00445.jpg', 'real_00492.jpg', 'real_00486.jpg', 'real_00487.jpg', 'real_00493.jpg', 'real_00322.jpg', 'real_00444.jpg', 'real_00450.jpg', 'real_01028.jpg', 'real_00336.jpg', 'real_01000.jpg', 'real_00478.jpg', 'real_01014.jpg', 'real_00685.jpg', 'real_00691.jpg', 'real_00849.jpg', 'real_00861.jpg', 'real_00875.jpg', 'real_00646.jpg', 'real_00120.jpg', 'real_00134.jpg', 'real_00652.jpg', 'real_00108.jpg', 'real_00929.jpg', 'real_00097.jpg', 'real_00083.jpg', 'real_00915.jpg', 'real_00901.jpg', 'real_00732.jpg', 'real_00054.jpg', 'real_00040.jpg', 'real_00726.jpg', 'real_00068.jpg', 'real_00295.jpg', 'real_00281.jpg', 'real_00256.jpg', 'real_00530.jpg', 'real_00524.jpg', 'real_00242.jpg', 'real_00518.jpg', 'real_00268.jpg', 'real_00532.jpg', 'real_00254.jpg', 'real_00240.jpg', 'real_00526.jpg', 'real_00297.jpg', 'real_00283.jpg', 'real_00718.jpg', 'real_00056.jpg', 'real_00730.jpg', 'real_00724.jpg', 'real_00042.jpg', 'real_00917.jpg', 'real_00903.jpg', 'real_00095.jpg', 'real_00081.jpg', 'real_00678.jpg', 'real_00122.jpg', 'real_00644.jpg', 'real_00650.jpg', 'real_00888.jpg', 'real_00136.jpg', 'real_00863.jpg', 'real_00877.jpg', 'real_00687.jpg', 'real_00693.jpg', 'real_01002.jpg', 'real_00308.jpg', 'real_01016.jpg', 'real_00446.jpg', 'real_00320.jpg', 'real_00334.jpg', 'real_00452.jpg', 'real_00485.jpg', 'real_00491.jpg', 'real_00490.jpg', 'real_00484.jpg', 'real_00335.jpg', 'real_00453.jpg', 'real_00447.jpg', 'real_00321.jpg', 'real_01017.jpg', 'real_00309.jpg', 'real_01003.jpg', 'real_00692.jpg', 'real_00686.jpg', 'real_00876.jpg', 'real_00862.jpg', 'real_00889.jpg', 'real_00651.jpg', 'real_00137.jpg', 'real_00123.jpg', 'real_00645.jpg', 'real_00679.jpg', 'real_00080.jpg', 'real_00094.jpg', 'real_00902.jpg', 'real_00916.jpg', 'real_00725.jpg', 'real_00043.jpg', 'real_00057.jpg', 'real_00731.jpg', 'real_00719.jpg', 'real_00282.jpg', 'real_00296.jpg', 'real_00241.jpg', 'real_00527.jpg', 'real_00533.jpg', 'real_00255.jpg', 'real_00269.jpg', 'real_00554.jpg', 'real_00232.jpg', 'real_00226.jpg', 'real_00540.jpg', 'real_00568.jpg', 'real_00597.jpg', 'real_00583.jpg', 'real_00030.jpg', 'real_00756.jpg', 'real_00742.jpg', 'real_00024.jpg', 'real_00018.jpg', 'real_00795.jpg', 'real_00781.jpg', 'real_00959.jpg', 'real_00971.jpg', 'real_00965.jpg', 'real_00144.jpg', 'real_00622.jpg', 'real_00636.jpg', 'real_00150.jpg', 'real_00178.jpg', 'real_00187.jpg', 'real_00839.jpg', 'real_00193.jpg', 'real_00805.jpg', 'real_00811.jpg', 'real_00420.jpg', 'real_00346.jpg', 'real_01058.jpg', 'real_00352.jpg', 'real_00434.jpg', 'real_01064.jpg', 'real_01070.jpg', 'real_00408.jpg', 'real_00385.jpg', 'real_00391.jpg', 'real_00390.jpg', 'real_00384.jpg', 'real_01071.jpg', 'real_00409.jpg', 'real_01065.jpg', 'real_00353.jpg', 'real_00435.jpg', 'real_00421.jpg', 'real_01059.jpg', 'real_00347.jpg', 'real_00810.jpg', 'real_00804.jpg', 'real_00192.jpg', 'real_00186.jpg', 'real_00838.jpg', 'real_00495(1).jpg', 'real_00179.jpg', 'real_00637.jpg', 'real_00151.jpg', 'real_00145.jpg', 'real_00623.jpg', 'real_00964.jpg', 'real_00970.jpg', 'real_00958.jpg', 'real_00780.jpg', 'real_00794.jpg', 'real_00019.jpg', 'real_00743.jpg', 'real_00025.jpg', 'real_00031.jpg', 'real_00757.jpg', 'real_00582.jpg', 'real_00596.jpg', 'real_00569.jpg', 'real_00227.jpg', 'real_00541.jpg', 'real_00555.jpg', 'real_00233.jpg', 'real_00543.jpg', 'real_00225.jpg', 'real_00231.jpg', 'real_00557.jpg', 'real_00219.jpg', 'real_00580.jpg', 'real_00594.jpg', 'real_00027.jpg', 'real_00999.jpg', 'real_00741.jpg', 'real_00755.jpg', 'real_00033.jpg', 'real_00769.jpg', 'real_00782.jpg', 'real_00796.jpg', 'real_00966.jpg', 'real_00972.jpg', 'real_00153.jpg', 'real_00635.jpg', 'real_00621.jpg', 'real_00147.jpg', 'real_00609.jpg', 'real_00190.jpg', 'real_00184.jpg', 'real_00812.jpg', 'real_00806.jpg', 'real_00437.jpg', 'real_00351.jpg', 'real_00345.jpg', 'real_00423.jpg', 'real_01073.jpg', 'real_00379.jpg', 'real_01067.jpg', 'real_00392.jpg', 'real_00386.jpg', 'real_00387.jpg', 'real_00393.jpg', 'real_01066.jpg', 'real_00378.jpg', 'real_01072.jpg', 'real_00344.jpg', 'real_00422.jpg', 'real_00436.jpg', 'real_00350.jpg', 'real_00807.jpg', 'real_00813.jpg', 'real_00185.jpg', 'real_00191.jpg', 'real_00608.jpg', 'real_00620.jpg', 'real_00146.jpg', 'real_00152.jpg', 'real_00634.jpg', 'real_00973.jpg', 'real_00967.jpg', 'real_00797.jpg', 'real_00783.jpg', 'real_00768.jpg', 'real_00754.jpg', 'real_00032.jpg', 'real_00026.jpg', 'real_00740.jpg', 'real_00998.jpg', 'real_00595.jpg', 'real_00581.jpg', 'real_00218.jpg', 'real_00230.jpg', 'real_00556.jpg', 'real_00542.jpg', 'real_00224.jpg', 'real_00208.jpg', 'real_00220.jpg', 'real_00546.jpg', 'real_00552.jpg', 'real_00234.jpg', 'real_00585.jpg', 'real_00591.jpg', 'real_00778.jpg', 'real_00744.jpg', 'real_00022.jpg', 'real_00036.jpg', 'real_00988.jpg', 'real_00750.jpg', 'real_00963.jpg', 'real_00977.jpg', 'real_00787.jpg', 'real_00793.jpg', 'real_00618.jpg', 'real_00630.jpg', 'real_00156.jpg', 'real_00142.jpg', 'real_00624.jpg', 'real_00817.jpg', 'real_00803.jpg', 'real_00195.jpg', 'real_00181.jpg', 'real_00368.jpg', 'real_01076.jpg', 'real_01062.jpg', 'real_00354.jpg', 'real_00432.jpg', 'real_00426.jpg', 'real_00340.jpg', 'real_00397.jpg', 'real_00383.jpg', 'real_00382.jpg', 'real_00396.jpg', 'real_00427.jpg', 'real_00341.jpg', 'real_00355.jpg', 'real_00433.jpg', 'real_01063.jpg', 'real_01077.jpg', 'real_00369.jpg', 'real_00180.jpg', 'real_00194.jpg', 'real_00802.jpg', 'real_00816.jpg', 'real_00143.jpg', 'real_00625.jpg', 'real_00631.jpg', 'real_00157.jpg', 'real_00619.jpg', 'real_00792.jpg', 'real_00786.jpg', 'real_00976.jpg', 'real_00962.jpg', 'real_00037.jpg', 'real_00751.jpg', 'real_00989.jpg', 'real_00745.jpg', 'real_00023.jpg', 'real_00779.jpg', 'real_00590.jpg', 'real_00584.jpg', 'real_00553.jpg', 'real_00235.jpg', 'real_00221.jpg', 'real_00547.jpg', 'real_00209.jpg', 'real_00579.jpg', 'real_00237.jpg', 'real_00551.jpg', 'real_00545.jpg', 'real_00223.jpg', 'real_00592.jpg', 'real_00586.jpg', 'real_00009.jpg', 'real_00753.jpg', 'real_00035.jpg', 'real_00021.jpg', 'real_00747.jpg', 'real_00974.jpg', 'real_00960.jpg', 'real_00790.jpg', 'real_00948.jpg', 'real_00784.jpg', 'real_00169.jpg', 'real_00627.jpg', 'real_00141.jpg', 'real_00155.jpg', 'real_00633.jpg', 'real_00800.jpg', 'real_00814.jpg', 'real_00182.jpg', 'real_00196.jpg', 'real_00828.jpg', 'real_01061.jpg', 'real_00419.jpg', 'real_01075.jpg', 'real_00343.jpg', 'real_00425.jpg', 'real_00431.jpg', 'real_00357.jpg', 'real_01049.jpg', 'real_00380.jpg', 'real_00394.jpg', 'real_00395.jpg', 'real_00381.jpg', 'real_00430.jpg', 'real_01048.jpg', 'real_00356.jpg', 'real_00342.jpg', 'real_00424.jpg', 'real_01074.jpg', 'real_01060.jpg', 'real_00418.jpg', 'real_00197.jpg', 'real_00829.jpg', 'real_00183.jpg', 'real_00815.jpg', 'real_00801.jpg', 'real_00154.jpg', 'real_00632.jpg', 'real_00626.jpg', 'real_00140.jpg', 'real_00168.jpg', 'real_00785.jpg', 'real_00949.jpg', 'real_00791.jpg', 'real_00961.jpg', 'real_00975.jpg', 'real_00020.jpg', 'real_00746.jpg', 'real_00752.jpg', 'real_00034.jpg', 'real_00008.jpg', 'real_00587.jpg', 'real_00593.jpg', 'real_00544.jpg', 'real_00222.jpg', 'real_00236.jpg', 'real_00550.jpg', 'real_00578.jpg', 'real_00575.jpg', 'real_00213.jpg', 'real_00207.jpg', 'real_00561.jpg', 'real_00549.jpg', 'real_00011.jpg', 'real_00777.jpg', 'real_00763.jpg', 'real_00005.jpg', 'real_00993.jpg', 'real_00987.jpg', 'real_00039.jpg', 'real_00978.jpg', 'real_00788.jpg', 'real_00950.jpg', 'real_00944.jpg', 'real_00165.jpg', 'real_00603.jpg', 'real_00617.jpg', 'real_00171.jpg', 'real_00159.jpg', 'real_00818.jpg', 'real_00824.jpg', 'real_00830.jpg', 'real_00401.jpg', 'real_00367.jpg', 'real_01079.jpg', 'real_00373.jpg', 'real_00415.jpg', 'real_01045.jpg', 'real_01051.jpg', 'real_00429.jpg', 'real_00398.jpg', 'real_00399.jpg', 'real_01050.jpg', 'real_00428.jpg', 'real_01044.jpg', 'real_00372.jpg', 'real_00414.jpg', 'real_00400.jpg', 'real_01078.jpg', 'real_00366.jpg', 'real_00831.jpg', 'real_00825.jpg', 'real_00819.jpg', 'real_00158.jpg', 'real_00616.jpg', 'real_00170.jpg', 'real_00164.jpg', 'real_00602.jpg', 'real_00945.jpg', 'real_00951.jpg', 'real_00789.jpg', 'real_00979.jpg', 'real_00986.jpg', 'real_00038.jpg', 'real_00992.jpg', 'real_00762.jpg', 'real_00004.jpg', 'real_00010.jpg', 'real_00776.jpg', 'real_00480(1).jpg', 'real_00548.jpg', 'real_00206.jpg', 'real_00560.jpg', 'real_00574.jpg', 'real_00212.jpg', 'real_00562.jpg', 'real_00204.jpg', 'real_00210.jpg', 'real_00576.jpg', 'real_00238.jpg', 'real_00589.jpg', 'real_00006.jpg', 'real_00760.jpg', 'real_00774.jpg', 'real_00012.jpg', 'real_00984.jpg', 'real_00990.jpg', 'real_00748.jpg', 'real_00947.jpg', 'real_00318(1).jpg', 'real_00953.jpg', 'real_00172.jpg', 'real_00614.jpg', 'real_00600.jpg', 'real_00166.jpg', 'real_00628.jpg', 'real_00833.jpg', 'real_00827.jpg', 'real_00199.jpg', 'real_00416.jpg', 'real_00370.jpg', 'real_00364.jpg', 'real_00402.jpg', 'real_01052.jpg', 'real_00358.jpg', 'real_01046.jpg', 'real_01047.jpg', 'real_00359.jpg', 'real_01053.jpg', 'real_00365.jpg', 'real_00403.jpg', 'real_00417.jpg', 'real_00371.jpg', 'real_00826.jpg', 'real_00198.jpg', 'real_00832.jpg', 'real_00629.jpg', 'real_00601.jpg', 'real_00167.jpg', 'real_00173.jpg', 'real_00615.jpg', 'real_00952.jpg', 'real_00946.jpg', 'real_00749.jpg', 'real_00991.jpg', 'real_00985.jpg', 'real_00775.jpg', 'real_00013.jpg', 'real_00007.jpg', 'real_00761.jpg', 'real_00588.jpg', 'real_00239.jpg', 'real_00211.jpg', 'real_00577.jpg', 'real_00563.jpg', 'real_00205.jpg', 'real_00229.jpg', 'real_01013(1).jpg', 'real_00201.jpg', 'real_00567.jpg', 'real_00573.jpg', 'real_00215.jpg', 'real_00598.jpg', 'real_00981.jpg', 'real_00759.jpg', 'real_00995.jpg', 'real_00765.jpg', 'real_00003.jpg', 'real_00017.jpg', 'real_00771.jpg', 'real_00942.jpg', 'real_00956.jpg', 'real_00639.jpg', 'real_00611.jpg', 'real_00177.jpg', 'real_00163.jpg', 'real_00605.jpg', 'real_00836.jpg', 'real_00188.jpg', 'real_00822.jpg', 'real_00349.jpg', 'real_01057.jpg', 'real_01043.jpg', 'real_00375.jpg', 'real_00413.jpg', 'real_00407.jpg', 'real_00361.jpg', 'real_01080.jpg', 'real_01081.jpg', 'real_00406.jpg', 'real_00360.jpg', 'real_00374.jpg', 'real_00412.jpg', 'real_01042.jpg', 'real_01056.jpg', 'real_00348.jpg', 'real_00823.jpg', 'real_00837.jpg', 'real_00189.jpg', 'real_00162.jpg', 'real_00604.jpg', 'real_00610.jpg', 'real_00176.jpg', 'real_00638.jpg', 'real_00957.jpg', 'real_00943.jpg', 'real_00016.jpg', 'real_00770.jpg', 'real_00764.jpg', 'real_00002.jpg', 'real_00994.jpg', 'real_00758.jpg', 'real_00980.jpg', 'real_00599.jpg', 'real_00572.jpg', 'real_00214.jpg', 'real_00200.jpg', 'real_00566.jpg', 'real_00228.jpg', 'real_00558.jpg', 'real_00216.jpg', 'real_00570.jpg', 'real_00564.jpg', 'real_00202.jpg', 'real_00996.jpg', 'real_00028.jpg', 'real_00982.jpg', 'real_00772.jpg', 'real_00014.jpg', 'real_00766.jpg', 'real_00955.jpg', 'real_00799.jpg', 'real_00941.jpg', 'real_00969.jpg', 'real_00148.jpg', 'real_00606.jpg', 'real_00160.jpg', 'real_00174.jpg', 'real_00612.jpg', 'real_00821.jpg', 'real_00835.jpg', 'real_00809.jpg', 'real_01040.jpg', 'real_00438.jpg', 'real_01054.jpg', 'real_00362.jpg', 'real_00404.jpg', 'real_00410.jpg', 'real_00376.jpg', 'real_01068.jpg', 'real_00389.jpg', 'real_00388.jpg', 'real_00411.jpg', 'real_01069.jpg', 'real_00377.jpg', 'real_00363.jpg', 'real_00405.jpg', 'real_01055.jpg', 'real_01041.jpg', 'real_00439.jpg', 'real_00808.jpg', 'real_00834.jpg', 'real_00820.jpg', 'real_00175.jpg', 'real_00613.jpg', 'real_00607.jpg', 'real_00161.jpg', 'real_00149.jpg', 'real_00968.jpg', 'real_00940.jpg', 'real_00798.jpg', 'real_00954.jpg', 'real_00001.jpg', 'real_00767.jpg', 'real_00773.jpg', 'real_00015.jpg', 'real_00983.jpg', 'real_00997.jpg', 'real_00029.jpg', 'real_00565.jpg', 'real_00203.jpg', 'real_00217.jpg', 'real_00571.jpg', 'real_00559.jpg', 'real_00270.jpg', 'real_00516.jpg', 'real_00502.jpg', 'real_00264.jpg', 'real_00258.jpg', 'real_00714.jpg', 'real_00072.jpg', 'real_00066.jpg', 'real_00700.jpg', 'real_00728.jpg', 'real_00933.jpg', 'real_00099.jpg', 'real_00927.jpg', 'real_00660.jpg', 'real_00106.jpg', 'real_00112.jpg', 'real_00674.jpg', 'real_00884.jpg', 'real_00648.jpg', 'real_00890.jpg', 'real_00847.jpg', 'real_00853.jpg', 'real_00304.jpg', 'real_00462.jpg', 'real_00476.jpg', 'real_00310.jpg', 'real_00338.jpg', 'real_01026.jpg', 'real_01032.jpg', 'real_00489.jpg', 'real_00488.jpg', 'real_01033.jpg', 'real_01027.jpg', 'real_00339.jpg', 'real_00477.jpg', 'real_00311.jpg', 'real_00305.jpg', 'real_00463.jpg', 'real_00852.jpg', 'real_00846.jpg', 'real_00891.jpg', 'real_00649.jpg', 'real_00885.jpg', 'real_00113.jpg', 'real_00675.jpg', 'real_00661.jpg', 'real_00107.jpg', 'real_00098.jpg', 'real_00926.jpg', 'real_00932.jpg', 'real_00729.jpg', 'real_00067.jpg', 'real_00701.jpg', 'real_00715.jpg', 'real_00073.jpg', 'real_00259.jpg', 'real_00503.jpg', 'real_00265.jpg', 'real_00271.jpg', 'real_00517.jpg', 'real_00267.jpg', 'real_00501.jpg', 'real_00515.jpg', 'real_00273.jpg', 'real_00529.jpg', 'real_00298.jpg', 'real_00494(1).jpg', 'real_00703.jpg', 'real_00065.jpg', 'real_00071.jpg', 'real_00717.jpg', 'real_00059.jpg', 'real_00918.jpg', 'real_00924.jpg', 'real_00930.jpg', 'real_00677.jpg', 'real_00111.jpg', 'real_00105.jpg', 'real_00663.jpg', 'real_00893.jpg', 'real_00139.jpg', 'real_00887.jpg', 'real_00878.jpg', 'real_00850.jpg', 'real_00688.jpg', 'real_00844.jpg', 'real_00313.jpg', 'real_00475.jpg', 'real_00461.jpg', 'real_00307.jpg', 'real_01019.jpg', 'real_01031.jpg', 'real_00449.jpg', 'real_01025.jpg', 'real_01024.jpg', 'real_01030.jpg', 'real_00448.jpg', 'real_00460.jpg', 'real_01018.jpg', 'real_00306.jpg', 'real_00312.jpg', 'real_00474.jpg', 'real_00845.jpg', 'real_00689.jpg', 'real_00851.jpg', 'real_00879.jpg', 'real_00138.jpg', 'real_00886.jpg', 'real_00892.jpg', 'real_00104.jpg', 'real_00662.jpg', 'real_00676.jpg', 'real_00110.jpg', 'real_00931.jpg', 'real_00925.jpg', 'real_00919.jpg', 'real_00058.jpg', 'real_00070.jpg', 'real_00716.jpg', 'real_00702.jpg', 'real_00064.jpg', 'real_00299.jpg', 'real_00528.jpg', 'real_00514.jpg', 'real_00272.jpg', 'real_00266.jpg', 'real_00500.jpg', 'real_00538.jpg', 'real_00504.jpg', 'real_00262.jpg', 'real_00276.jpg', 'real_00510.jpg', 'real_00289.jpg', 'real_00048.jpg', 'real_00060.jpg', 'real_00706.jpg', 'real_00712.jpg', 'real_00074.jpg', 'real_00921.jpg', 'real_00935.jpg', 'real_00909.jpg', 'real_00128.jpg', 'real_00896.jpg', 'real_00882.jpg', 'real_00114.jpg', 'real_00672.jpg', 'real_00666.jpg', 'real_00100.jpg', 'real_00855.jpg', 'real_00841.jpg', 'real_00699.jpg', 'real_00869.jpg', 'real_01034.jpg', 'real_01020.jpg', 'real_00458.jpg', 'real_00470.jpg', 'real_00316.jpg', 'real_01008.jpg', 'real_00302.jpg', 'real_00464.jpg', 'real_00303.jpg', 'real_00465.jpg', 'real_00471.jpg', 'real_01009.jpg', 'real_00317.jpg', 'real_01021.jpg', 'real_00459.jpg', 'real_01035.jpg', 'real_00868.jpg', 'real_00698.jpg', 'real_00840.jpg', 'real_00854.jpg', 'real_00667.jpg', 'real_00101.jpg', 'real_00115.jpg', 'real_00673.jpg', 'real_00883.jpg', 'real_00129.jpg', 'real_00897.jpg', 'real_00908.jpg', 'real_00934.jpg', 'real_00920.jpg', 'real_00713.jpg', 'real_00075.jpg', 'real_00061.jpg', 'real_00707.jpg', 'real_00049.jpg', 'real_00288.jpg', 'real_00277.jpg', 'real_00511.jpg', 'real_00505.jpg', 'real_00263.jpg', 'real_00539.jpg', 'real_00249.jpg', 'real_00513.jpg', 'real_00275.jpg', 'real_00261.jpg', 'real_00507.jpg', 'real_00739.jpg', 'real_00077.jpg', 'real_00711.jpg', 'real_00705.jpg', 'real_00063.jpg', 'real_00088.jpg', 'real_00936.jpg', 'real_00922.jpg', 'real_00659.jpg', 'real_00881.jpg', 'real_00895.jpg', 'real_00103.jpg', 'real_00665.jpg', 'real_00671.jpg', 'real_00117.jpg', 'real_00842.jpg', 'real_00856.jpg', 'real_01023.jpg', 'real_00329.jpg', 'real_01037.jpg', 'real_00467.jpg', 'real_00301.jpg', 'real_00315.jpg', 'real_00473.jpg', 'real_00498.jpg', 'real_00499.jpg', 'real_00314.jpg', 'real_00472.jpg', 'real_00466.jpg', 'real_00300.jpg', 'real_01036.jpg', 'real_00328.jpg', 'real_01022.jpg', 'real_00857.jpg', 'real_00843.jpg', 'real_00670.jpg', 'real_00116.jpg', 'real_00102.jpg', 'real_00664.jpg', 'real_00894.jpg', 'real_00880.jpg', 'real_00658.jpg', 'real_00923.jpg', 'real_00089.jpg', 'real_00937.jpg', 'real_00704.jpg', 'real_00062.jpg', 'real_00076.jpg', 'real_00710.jpg', 'real_00738.jpg', 'real_00260.jpg', 'real_00506.jpg', 'real_00512.jpg', 'real_00274.jpg', 'real_01007(1).jpg', 'real_00248.jpg']

Observations:

  • The directory and the files are accessible.
In [26]:
# Get the metadata of the image directory
display(Markdown("**Observations:**"))
display(Markdown("- The number of files in the directory is: {}.".format(len(DirList))))

Observations:

  • The number of files in the directory is: 1091.
In [27]:
# Use the below array to store the image data from each file
ImageFileData = []
for filename in os.listdir(ImageFolder):
    # Ensure the file is an image
    if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
        file_path = os.path.join(ImageFolder, filename)
        
        # Read the image
        image = cv2.imread(file_path)
        ImageFileData.append(image)
display(Markdown("**Observations:**\n"))
display(Markdown("- The number files processed is: {}.".format(len(ImageFileData))))

Observations:

  • The number files processed is: 1091.
In [28]:
#Print the first data 
ImageFileData[0]
Out[28]:
array([[[ 0,  8,  1],
        [ 4, 12,  5],
        [ 5, 13,  6],
        ...,
        [10, 19,  9],
        [10, 18,  8],
        [13, 21, 11]],

       [[ 3, 11,  4],
        [ 3, 11,  4],
        [ 1,  9,  2],
        ...,
        [12, 21, 11],
        [ 9, 18,  8],
        [13, 22, 12]],

       [[ 5, 13,  6],
        [ 6, 14,  7],
        [ 3, 11,  4],
        ...,
        [10, 19,  9],
        [ 7, 16,  6],
        [14, 23, 13]],

       ...,

       [[15, 23, 22],
        [16, 24, 23],
        [15, 23, 22],
        ...,
        [10, 15, 13],
        [ 7, 12, 10],
        [ 4,  9,  7]],

       [[23, 31, 30],
        [23, 31, 30],
        [21, 29, 28],
        ...,
        [12, 17, 15],
        [11, 16, 14],
        [ 6, 11,  9]],

       [[27, 35, 34],
        [13, 21, 20],
        [ 9, 17, 16],
        ...,
        [10, 15, 13],
        [11, 16, 14],
        [ 8, 13, 11]]], dtype=uint8)
In [29]:
# Display the first 10 images
# Print the first 1 masked images
for i in range(0, 1):
    fig = plt.figure(figsize = (15, 10))
    ax = fig.add_subplot(1, 1, 1)
    plt.axis("off")
    plt.imshow(ImageFileData[i])
plt.show()
No description has been provided for this image

b) Detect faces, extract metadata for the faces in all the images, and write and save it into a DataFrame ¶

In [30]:
# Object Detection using Haar feature-based cascade classifiers is an effective object detection method. 
# For more details we can refer to https://docs.opencv.org/3.4/db/d28/tutorial_cascade_classifier.html
FaceCascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
In [31]:
x_cord=[]
y_cord=[]
height=[]
width=[]
face_detected=[]
image_name=[]
In [32]:
# We will use cv2.
def visualize_faces(image, faces):
    for (x, y, w, h) in faces:
        cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 2)
    plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
    plt.axis("off")
    plt.show()

Observations:

  • Function is created successfully.
In [33]:
for i in range (len(DirList)):

    # Create a cascade classfier object
    FaceCascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")   # frontal face 
    
    data_path = os.path.join(ImageFolder,DirList[i])

    print("Execution loop = ", i, "for file: ", data_path)
    image = cv2.imread(data_path)
    
    # Convert the image to grayscale (required for Haar cascade)
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        
    # Detect faces in the image
    faces = FaceCascade.detectMultiScale(gray_image, scaleFactor = 1.1, minNeighbors = 5, minSize = (30, 30))

    j = 0
    
    # Add metadata for each detected face
    for (x, y, w, h) in faces:
        rect_mage = cv2.rectangle(gray_image, (x, y), (x + w, y + h), (255, 0, 0), 2)
        j = j + 1

    resized = cv2.resize(image, (int(gray_image.shape[1] / 2), int(gray_image.shape[0])))

    length = len(faces)

    name = DirList[i]

    if length == 0:
        a = 0
        b = 0
        c = 0
        d = 0
        j = 0

    else:
        a = faces[0,0]
        b = faces[0,1]
        c = faces[0,2]
        d = faces[0,3]  
        

    x_cord.append(a)
    y_cord.append(b)
    width.append(c)
    height.append(d)
    face_detected.append(j)
    image_name.append(name)
    
    # Optional: Visualize detected faces
    print(f"Detected {len(faces)} faces in {name}.")
Execution loop =  0 for file:  training_images/real_00251.jpg
Detected 1 faces in real_00251.jpg.
Execution loop =  1 for file:  training_images/real_00537.jpg
Detected 1 faces in real_00537.jpg.
Execution loop =  2 for file:  training_images/real_00523.jpg
Detected 1 faces in real_00523.jpg.
Execution loop =  3 for file:  training_images/real_00245.jpg
Detected 1 faces in real_00245.jpg.
Execution loop =  4 for file:  training_images/real_00279.jpg
Detected 1 faces in real_00279.jpg.
Execution loop =  5 for file:  training_images/real_00292.jpg
Detected 1 faces in real_00292.jpg.
Execution loop =  6 for file:  training_images/real_00286.jpg
Detected 1 faces in real_00286.jpg.
Execution loop =  7 for file:  training_images/real_00735.jpg
Detected 2 faces in real_00735.jpg.
Execution loop =  8 for file:  training_images/real_00053.jpg
Detected 1 faces in real_00053.jpg.
Execution loop =  9 for file:  training_images/real_00047.jpg
Detected 2 faces in real_00047.jpg.
Execution loop =  10 for file:  training_images/real_00721.jpg
Detected 1 faces in real_00721.jpg.
Execution loop =  11 for file:  training_images/real_00709.jpg
Detected 0 faces in real_00709.jpg.
Execution loop =  12 for file:  training_images/real_00090.jpg
Detected 1 faces in real_00090.jpg.
Execution loop =  13 for file:  training_images/real_00084.jpg
Detected 1 faces in real_00084.jpg.
Execution loop =  14 for file:  training_images/real_00912.jpg
Detected 0 faces in real_00912.jpg.
Execution loop =  15 for file:  training_images/real_00906.jpg
Detected 1 faces in real_00906.jpg.
Execution loop =  16 for file:  training_images/real_00641.jpg
Detected 1 faces in real_00641.jpg.
Execution loop =  17 for file:  training_images/real_00899.jpg
Detected 1 faces in real_00899.jpg.
Execution loop =  18 for file:  training_images/real_00127.jpg
Detected 1 faces in real_00127.jpg.
Execution loop =  19 for file:  training_images/real_00133.jpg
Detected 1 faces in real_00133.jpg.
Execution loop =  20 for file:  training_images/real_00655.jpg
Detected 0 faces in real_00655.jpg.
Execution loop =  21 for file:  training_images/real_00669.jpg
Detected 1 faces in real_00669.jpg.
Execution loop =  22 for file:  training_images/real_00682.jpg
Detected 1 faces in real_00682.jpg.
Execution loop =  23 for file:  training_images/real_00696.jpg
Detected 1 faces in real_00696.jpg.
Execution loop =  24 for file:  training_images/real_00866.jpg
Detected 1 faces in real_00866.jpg.
Execution loop =  25 for file:  training_images/real_00872.jpg
Detected 0 faces in real_00872.jpg.
Execution loop =  26 for file:  training_images/real_00325.jpg
Detected 1 faces in real_00325.jpg.
Execution loop =  27 for file:  training_images/real_00443.jpg
Detected 0 faces in real_00443.jpg.
Execution loop =  28 for file:  training_images/real_00457.jpg
Detected 1 faces in real_00457.jpg.
Execution loop =  29 for file:  training_images/real_00331.jpg
Detected 1 faces in real_00331.jpg.
Execution loop =  30 for file:  training_images/real_00319.jpg
Detected 0 faces in real_00319.jpg.
Execution loop =  31 for file:  training_images/real_01007.jpg
Detected 1 faces in real_01007.jpg.
Execution loop =  32 for file:  training_images/real_00331(1).jpg
Detected 1 faces in real_00331(1).jpg.
Execution loop =  33 for file:  training_images/real_01013.jpg
Detected 1 faces in real_01013.jpg.
Execution loop =  34 for file:  training_images/real_00480.jpg
Detected 1 faces in real_00480.jpg.
Execution loop =  35 for file:  training_images/real_00494.jpg
Detected 1 faces in real_00494.jpg.
Execution loop =  36 for file:  training_images/real_00319(1).jpg
Detected 0 faces in real_00319(1).jpg.
Execution loop =  37 for file:  training_images/real_00495.jpg
Detected 1 faces in real_00495.jpg.
Execution loop =  38 for file:  training_images/real_00481.jpg
Detected 1 faces in real_00481.jpg.
Execution loop =  39 for file:  training_images/real_01012.jpg
Detected 1 faces in real_01012.jpg.
Execution loop =  40 for file:  training_images/real_01006.jpg
Detected 1 faces in real_01006.jpg.
Execution loop =  41 for file:  training_images/real_00318.jpg
Detected 0 faces in real_00318.jpg.
Execution loop =  42 for file:  training_images/real_00456.jpg
Detected 1 faces in real_00456.jpg.
Execution loop =  43 for file:  training_images/real_00330.jpg
Detected 1 faces in real_00330.jpg.
Execution loop =  44 for file:  training_images/real_00324.jpg
Detected 1 faces in real_00324.jpg.
Execution loop =  45 for file:  training_images/real_00442.jpg
Detected 1 faces in real_00442.jpg.
Execution loop =  46 for file:  training_images/real_00456(1).jpg
Detected 1 faces in real_00456(1).jpg.
Execution loop =  47 for file:  training_images/real_00873.jpg
Detected 1 faces in real_00873.jpg.
Execution loop =  48 for file:  training_images/real_00867.jpg
Detected 2 faces in real_00867.jpg.
Execution loop =  49 for file:  training_images/real_00697.jpg
Detected 0 faces in real_00697.jpg.
Execution loop =  50 for file:  training_images/real_00683.jpg
Detected 0 faces in real_00683.jpg.
Execution loop =  51 for file:  training_images/real_00668.jpg
Detected 1 faces in real_00668.jpg.
Execution loop =  52 for file:  training_images/real_00132.jpg
Detected 1 faces in real_00132.jpg.
Execution loop =  53 for file:  training_images/real_00654.jpg
Detected 1 faces in real_00654.jpg.
Execution loop =  54 for file:  training_images/real_00898.jpg
Detected 1 faces in real_00898.jpg.
Execution loop =  55 for file:  training_images/real_00640.jpg
Detected 1 faces in real_00640.jpg.
Execution loop =  56 for file:  training_images/real_00126.jpg
Detected 1 faces in real_00126.jpg.
Execution loop =  57 for file:  training_images/real_00907.jpg
Detected 1 faces in real_00907.jpg.
Execution loop =  58 for file:  training_images/real_00913.jpg
Detected 1 faces in real_00913.jpg.
Execution loop =  59 for file:  training_images/real_00085.jpg
Detected 1 faces in real_00085.jpg.
Execution loop =  60 for file:  training_images/real_00091.jpg
Detected 0 faces in real_00091.jpg.
Execution loop =  61 for file:  training_images/real_00708.jpg
Detected 1 faces in real_00708.jpg.
Execution loop =  62 for file:  training_images/real_00046.jpg
Detected 1 faces in real_00046.jpg.
Execution loop =  63 for file:  training_images/real_00720.jpg
Detected 1 faces in real_00720.jpg.
Execution loop =  64 for file:  training_images/real_00734.jpg
Detected 1 faces in real_00734.jpg.
Execution loop =  65 for file:  training_images/real_00052.jpg
Detected 1 faces in real_00052.jpg.
Execution loop =  66 for file:  training_images/real_00287.jpg
Detected 1 faces in real_00287.jpg.
Execution loop =  67 for file:  training_images/real_00293.jpg
Detected 1 faces in real_00293.jpg.
Execution loop =  68 for file:  training_images/real_00278.jpg
Detected 1 faces in real_00278.jpg.
Execution loop =  69 for file:  training_images/real_00522.jpg
Detected 0 faces in real_00522.jpg.
Execution loop =  70 for file:  training_images/real_00244.jpg
Detected 1 faces in real_00244.jpg.
Execution loop =  71 for file:  training_images/real_00250.jpg
Detected 0 faces in real_00250.jpg.
Execution loop =  72 for file:  training_images/real_00536.jpg
Detected 0 faces in real_00536.jpg.
Execution loop =  73 for file:  training_images/real_00246.jpg
Detected 1 faces in real_00246.jpg.
Execution loop =  74 for file:  training_images/real_00520.jpg
Detected 1 faces in real_00520.jpg.
Execution loop =  75 for file:  training_images/real_00534.jpg
Detected 1 faces in real_00534.jpg.
Execution loop =  76 for file:  training_images/real_00252.jpg
Detected 1 faces in real_00252.jpg.
Execution loop =  77 for file:  training_images/real_00508.jpg
Detected 1 faces in real_00508.jpg.
Execution loop =  78 for file:  training_images/real_00285.jpg
Detected 1 faces in real_00285.jpg.
Execution loop =  79 for file:  training_images/real_00291.jpg
Detected 1 faces in real_00291.jpg.
Execution loop =  80 for file:  training_images/real_00722.jpg
Detected 0 faces in real_00722.jpg.
Execution loop =  81 for file:  training_images/real_00044.jpg
Detected 1 faces in real_00044.jpg.
Execution loop =  82 for file:  training_images/real_00050.jpg
Detected 1 faces in real_00050.jpg.
Execution loop =  83 for file:  training_images/real_00736.jpg
Detected 1 faces in real_00736.jpg.
Execution loop =  84 for file:  training_images/real_00078.jpg
Detected 1 faces in real_00078.jpg.
Execution loop =  85 for file:  training_images/real_00939.jpg
Detected 1 faces in real_00939.jpg.
Execution loop =  86 for file:  training_images/real_00087.jpg
Detected 1 faces in real_00087.jpg.
Execution loop =  87 for file:  training_images/real_00093.jpg
Detected 1 faces in real_00093.jpg.
Execution loop =  88 for file:  training_images/real_00905.jpg
Detected 3 faces in real_00905.jpg.
Execution loop =  89 for file:  training_images/real_00911.jpg
Detected 2 faces in real_00911.jpg.
Execution loop =  90 for file:  training_images/real_00656.jpg
Detected 1 faces in real_00656.jpg.
Execution loop =  91 for file:  training_images/real_00130.jpg
Detected 1 faces in real_00130.jpg.
Execution loop =  92 for file:  training_images/real_00124.jpg
Detected 1 faces in real_00124.jpg.
Execution loop =  93 for file:  training_images/real_00642.jpg
Detected 1 faces in real_00642.jpg.
Execution loop =  94 for file:  training_images/real_00118.jpg
Detected 0 faces in real_00118.jpg.
Execution loop =  95 for file:  training_images/real_00695.jpg
Detected 1 faces in real_00695.jpg.
Execution loop =  96 for file:  training_images/real_00481(1).jpg
Detected 1 faces in real_00481(1).jpg.
Execution loop =  97 for file:  training_images/real_00859.jpg
Detected 1 faces in real_00859.jpg.
Execution loop =  98 for file:  training_images/real_00681.jpg
Detected 1 faces in real_00681.jpg.
Execution loop =  99 for file:  training_images/real_00871.jpg
Detected 1 faces in real_00871.jpg.
Execution loop =  100 for file:  training_images/real_00865.jpg
Detected 1 faces in real_00865.jpg.
Execution loop =  101 for file:  training_images/real_00332.jpg
Detected 1 faces in real_00332.jpg.
Execution loop =  102 for file:  training_images/real_00454.jpg
Detected 1 faces in real_00454.jpg.
Execution loop =  103 for file:  training_images/real_00440.jpg
Detected 1 faces in real_00440.jpg.
Execution loop =  104 for file:  training_images/real_00326.jpg
Detected 0 faces in real_00326.jpg.
Execution loop =  105 for file:  training_images/real_01038.jpg
Detected 1 faces in real_01038.jpg.
Execution loop =  106 for file:  training_images/real_01010.jpg
Detected 1 faces in real_01010.jpg.
Execution loop =  107 for file:  training_images/real_00468.jpg
Detected 1 faces in real_00468.jpg.
Execution loop =  108 for file:  training_images/real_01004.jpg
Detected 1 faces in real_01004.jpg.
Execution loop =  109 for file:  training_images/real_00497.jpg
Detected 1 faces in real_00497.jpg.
Execution loop =  110 for file:  training_images/real_00483.jpg
Detected 1 faces in real_00483.jpg.
Execution loop =  111 for file:  training_images/real_00482.jpg
Detected 1 faces in real_00482.jpg.
Execution loop =  112 for file:  training_images/real_00496.jpg
Detected 1 faces in real_00496.jpg.
Execution loop =  113 for file:  training_images/real_01005.jpg
Detected 0 faces in real_01005.jpg.
Execution loop =  114 for file:  training_images/real_01011.jpg
Detected 1 faces in real_01011.jpg.
Execution loop =  115 for file:  training_images/real_00469.jpg
Detected 1 faces in real_00469.jpg.
Execution loop =  116 for file:  training_images/real_00441.jpg
Detected 1 faces in real_00441.jpg.
Execution loop =  117 for file:  training_images/real_01039.jpg
Detected 1 faces in real_01039.jpg.
Execution loop =  118 for file:  training_images/real_00327.jpg
Detected 0 faces in real_00327.jpg.
Execution loop =  119 for file:  training_images/real_00333.jpg
Detected 1 faces in real_00333.jpg.
Execution loop =  120 for file:  training_images/real_00455.jpg
Detected 1 faces in real_00455.jpg.
Execution loop =  121 for file:  training_images/real_00864.jpg
Detected 1 faces in real_00864.jpg.
Execution loop =  122 for file:  training_images/real_00870.jpg
Detected 0 faces in real_00870.jpg.
Execution loop =  123 for file:  training_images/real_00680.jpg
Detected 1 faces in real_00680.jpg.
Execution loop =  124 for file:  training_images/real_00858.jpg
Detected 1 faces in real_00858.jpg.
Execution loop =  125 for file:  training_images/real_00694.jpg
Detected 1 faces in real_00694.jpg.
Execution loop =  126 for file:  training_images/real_00119.jpg
Detected 1 faces in real_00119.jpg.
Execution loop =  127 for file:  training_images/real_00125.jpg
Detected 1 faces in real_00125.jpg.
Execution loop =  128 for file:  training_images/real_00643.jpg
Detected 1 faces in real_00643.jpg.
Execution loop =  129 for file:  training_images/real_00657.jpg
Detected 1 faces in real_00657.jpg.
Execution loop =  130 for file:  training_images/real_00131.jpg
Detected 1 faces in real_00131.jpg.
Execution loop =  131 for file:  training_images/real_00910.jpg
Detected 0 faces in real_00910.jpg.
Execution loop =  132 for file:  training_images/real_00904.jpg
Detected 0 faces in real_00904.jpg.
Execution loop =  133 for file:  training_images/real_00092.jpg
Detected 1 faces in real_00092.jpg.
Execution loop =  134 for file:  training_images/real_00938.jpg
Detected 1 faces in real_00938.jpg.
Execution loop =  135 for file:  training_images/real_00086.jpg
Detected 0 faces in real_00086.jpg.
Execution loop =  136 for file:  training_images/real_00079.jpg
Detected 1 faces in real_00079.jpg.
Execution loop =  137 for file:  training_images/real_00051.jpg
Detected 1 faces in real_00051.jpg.
Execution loop =  138 for file:  training_images/real_00737.jpg
Detected 1 faces in real_00737.jpg.
Execution loop =  139 for file:  training_images/real_00723.jpg
Detected 0 faces in real_00723.jpg.
Execution loop =  140 for file:  training_images/real_00045.jpg
Detected 1 faces in real_00045.jpg.
Execution loop =  141 for file:  training_images/real_00290.jpg
Detected 1 faces in real_00290.jpg.
Execution loop =  142 for file:  training_images/real_00284.jpg
Detected 1 faces in real_00284.jpg.
Execution loop =  143 for file:  training_images/real_00509.jpg
Detected 1 faces in real_00509.jpg.
Execution loop =  144 for file:  training_images/real_00535.jpg
Detected 1 faces in real_00535.jpg.
Execution loop =  145 for file:  training_images/real_00253.jpg
Detected 1 faces in real_00253.jpg.
Execution loop =  146 for file:  training_images/real_00247.jpg
Detected 0 faces in real_00247.jpg.
Execution loop =  147 for file:  training_images/real_00521.jpg
Detected 1 faces in real_00521.jpg.
Execution loop =  148 for file:  training_images/real_00519.jpg
Detected 0 faces in real_00519.jpg.
Execution loop =  149 for file:  training_images/real_00525.jpg
Detected 1 faces in real_00525.jpg.
Execution loop =  150 for file:  training_images/real_00243.jpg
Detected 1 faces in real_00243.jpg.
Execution loop =  151 for file:  training_images/real_00257.jpg
Detected 1 faces in real_00257.jpg.
Execution loop =  152 for file:  training_images/real_00531.jpg
Detected 1 faces in real_00531.jpg.
Execution loop =  153 for file:  training_images/real_00280.jpg
Detected 0 faces in real_00280.jpg.
Execution loop =  154 for file:  training_images/real_00294.jpg
Detected 1 faces in real_00294.jpg.
Execution loop =  155 for file:  training_images/real_00069.jpg
Detected 1 faces in real_00069.jpg.
Execution loop =  156 for file:  training_images/real_00041.jpg
Detected 1 faces in real_00041.jpg.
Execution loop =  157 for file:  training_images/real_00727.jpg
Detected 1 faces in real_00727.jpg.
Execution loop =  158 for file:  training_images/real_00733.jpg
Detected 2 faces in real_00733.jpg.
Execution loop =  159 for file:  training_images/real_00055.jpg
Detected 2 faces in real_00055.jpg.
Execution loop =  160 for file:  training_images/real_00900.jpg
Detected 1 faces in real_00900.jpg.
Execution loop =  161 for file:  training_images/real_00914.jpg
Detected 1 faces in real_00914.jpg.
Execution loop =  162 for file:  training_images/real_00082.jpg
Detected 1 faces in real_00082.jpg.
Execution loop =  163 for file:  training_images/real_00928.jpg
Detected 1 faces in real_00928.jpg.
Execution loop =  164 for file:  training_images/real_00096.jpg
Detected 1 faces in real_00096.jpg.
Execution loop =  165 for file:  training_images/real_00109.jpg
Detected 1 faces in real_00109.jpg.
Execution loop =  166 for file:  training_images/real_00135.jpg
Detected 1 faces in real_00135.jpg.
Execution loop =  167 for file:  training_images/real_00653.jpg
Detected 1 faces in real_00653.jpg.
Execution loop =  168 for file:  training_images/real_00647.jpg
Detected 1 faces in real_00647.jpg.
Execution loop =  169 for file:  training_images/real_00121.jpg
Detected 1 faces in real_00121.jpg.
Execution loop =  170 for file:  training_images/real_00874.jpg
Detected 1 faces in real_00874.jpg.
Execution loop =  171 for file:  training_images/real_00860.jpg
Detected 1 faces in real_00860.jpg.
Execution loop =  172 for file:  training_images/real_00848.jpg
Detected 1 faces in real_00848.jpg.
Execution loop =  173 for file:  training_images/real_00690.jpg
Detected 1 faces in real_00690.jpg.
Execution loop =  174 for file:  training_images/real_00684.jpg
Detected 1 faces in real_00684.jpg.
Execution loop =  175 for file:  training_images/real_01015.jpg
Detected 1 faces in real_01015.jpg.
Execution loop =  176 for file:  training_images/real_01001.jpg
Detected 2 faces in real_01001.jpg.
Execution loop =  177 for file:  training_images/real_00479.jpg
Detected 2 faces in real_00479.jpg.
Execution loop =  178 for file:  training_images/real_00451.jpg
Detected 1 faces in real_00451.jpg.
Execution loop =  179 for file:  training_images/real_00337.jpg
Detected 1 faces in real_00337.jpg.
Execution loop =  180 for file:  training_images/real_01029.jpg
Detected 1 faces in real_01029.jpg.
Execution loop =  181 for file:  training_images/real_00323.jpg
Detected 0 faces in real_00323.jpg.
Execution loop =  182 for file:  training_images/real_00445.jpg
Detected 1 faces in real_00445.jpg.
Execution loop =  183 for file:  training_images/real_00492.jpg
Detected 1 faces in real_00492.jpg.
Execution loop =  184 for file:  training_images/real_00486.jpg
Detected 0 faces in real_00486.jpg.
Execution loop =  185 for file:  training_images/real_00487.jpg
Detected 1 faces in real_00487.jpg.
Execution loop =  186 for file:  training_images/real_00493.jpg
Detected 0 faces in real_00493.jpg.
Execution loop =  187 for file:  training_images/real_00322.jpg
Detected 1 faces in real_00322.jpg.
Execution loop =  188 for file:  training_images/real_00444.jpg
Detected 1 faces in real_00444.jpg.
Execution loop =  189 for file:  training_images/real_00450.jpg
Detected 1 faces in real_00450.jpg.
Execution loop =  190 for file:  training_images/real_01028.jpg
Detected 1 faces in real_01028.jpg.
Execution loop =  191 for file:  training_images/real_00336.jpg
Detected 1 faces in real_00336.jpg.
Execution loop =  192 for file:  training_images/real_01000.jpg
Detected 1 faces in real_01000.jpg.
Execution loop =  193 for file:  training_images/real_00478.jpg
Detected 1 faces in real_00478.jpg.
Execution loop =  194 for file:  training_images/real_01014.jpg
Detected 0 faces in real_01014.jpg.
Execution loop =  195 for file:  training_images/real_00685.jpg
Detected 1 faces in real_00685.jpg.
Execution loop =  196 for file:  training_images/real_00691.jpg
Detected 0 faces in real_00691.jpg.
Execution loop =  197 for file:  training_images/real_00849.jpg
Detected 1 faces in real_00849.jpg.
Execution loop =  198 for file:  training_images/real_00861.jpg
Detected 1 faces in real_00861.jpg.
Execution loop =  199 for file:  training_images/real_00875.jpg
Detected 0 faces in real_00875.jpg.
Execution loop =  200 for file:  training_images/real_00646.jpg
Detected 1 faces in real_00646.jpg.
Execution loop =  201 for file:  training_images/real_00120.jpg
Detected 1 faces in real_00120.jpg.
Execution loop =  202 for file:  training_images/real_00134.jpg
Detected 1 faces in real_00134.jpg.
Execution loop =  203 for file:  training_images/real_00652.jpg
Detected 0 faces in real_00652.jpg.
Execution loop =  204 for file:  training_images/real_00108.jpg
Detected 1 faces in real_00108.jpg.
Execution loop =  205 for file:  training_images/real_00929.jpg
Detected 2 faces in real_00929.jpg.
Execution loop =  206 for file:  training_images/real_00097.jpg
Detected 0 faces in real_00097.jpg.
Execution loop =  207 for file:  training_images/real_00083.jpg
Detected 1 faces in real_00083.jpg.
Execution loop =  208 for file:  training_images/real_00915.jpg
Detected 1 faces in real_00915.jpg.
Execution loop =  209 for file:  training_images/real_00901.jpg
Detected 1 faces in real_00901.jpg.
Execution loop =  210 for file:  training_images/real_00732.jpg
Detected 1 faces in real_00732.jpg.
Execution loop =  211 for file:  training_images/real_00054.jpg
Detected 1 faces in real_00054.jpg.
Execution loop =  212 for file:  training_images/real_00040.jpg
Detected 1 faces in real_00040.jpg.
Execution loop =  213 for file:  training_images/real_00726.jpg
Detected 1 faces in real_00726.jpg.
Execution loop =  214 for file:  training_images/real_00068.jpg
Detected 1 faces in real_00068.jpg.
Execution loop =  215 for file:  training_images/real_00295.jpg
Detected 1 faces in real_00295.jpg.
Execution loop =  216 for file:  training_images/real_00281.jpg
Detected 1 faces in real_00281.jpg.
Execution loop =  217 for file:  training_images/real_00256.jpg
Detected 1 faces in real_00256.jpg.
Execution loop =  218 for file:  training_images/real_00530.jpg
Detected 1 faces in real_00530.jpg.
Execution loop =  219 for file:  training_images/real_00524.jpg
Detected 1 faces in real_00524.jpg.
Execution loop =  220 for file:  training_images/real_00242.jpg
Detected 1 faces in real_00242.jpg.
Execution loop =  221 for file:  training_images/real_00518.jpg
Detected 2 faces in real_00518.jpg.
Execution loop =  222 for file:  training_images/real_00268.jpg
Detected 1 faces in real_00268.jpg.
Execution loop =  223 for file:  training_images/real_00532.jpg
Detected 1 faces in real_00532.jpg.
Execution loop =  224 for file:  training_images/real_00254.jpg
Detected 1 faces in real_00254.jpg.
Execution loop =  225 for file:  training_images/real_00240.jpg
Detected 0 faces in real_00240.jpg.
Execution loop =  226 for file:  training_images/real_00526.jpg
Detected 1 faces in real_00526.jpg.
Execution loop =  227 for file:  training_images/real_00297.jpg
Detected 1 faces in real_00297.jpg.
Execution loop =  228 for file:  training_images/real_00283.jpg
Detected 1 faces in real_00283.jpg.
Execution loop =  229 for file:  training_images/real_00718.jpg
Detected 2 faces in real_00718.jpg.
Execution loop =  230 for file:  training_images/real_00056.jpg
Detected 0 faces in real_00056.jpg.
Execution loop =  231 for file:  training_images/real_00730.jpg
Detected 2 faces in real_00730.jpg.
Execution loop =  232 for file:  training_images/real_00724.jpg
Detected 1 faces in real_00724.jpg.
Execution loop =  233 for file:  training_images/real_00042.jpg
Detected 0 faces in real_00042.jpg.
Execution loop =  234 for file:  training_images/real_00917.jpg
Detected 0 faces in real_00917.jpg.
Execution loop =  235 for file:  training_images/real_00903.jpg
Detected 1 faces in real_00903.jpg.
Execution loop =  236 for file:  training_images/real_00095.jpg
Detected 1 faces in real_00095.jpg.
Execution loop =  237 for file:  training_images/real_00081.jpg
Detected 0 faces in real_00081.jpg.
Execution loop =  238 for file:  training_images/real_00678.jpg
Detected 1 faces in real_00678.jpg.
Execution loop =  239 for file:  training_images/real_00122.jpg
Detected 1 faces in real_00122.jpg.
Execution loop =  240 for file:  training_images/real_00644.jpg
Detected 1 faces in real_00644.jpg.
Execution loop =  241 for file:  training_images/real_00650.jpg
Detected 1 faces in real_00650.jpg.
Execution loop =  242 for file:  training_images/real_00888.jpg
Detected 0 faces in real_00888.jpg.
Execution loop =  243 for file:  training_images/real_00136.jpg
Detected 1 faces in real_00136.jpg.
Execution loop =  244 for file:  training_images/real_00863.jpg
Detected 1 faces in real_00863.jpg.
Execution loop =  245 for file:  training_images/real_00877.jpg
Detected 0 faces in real_00877.jpg.
Execution loop =  246 for file:  training_images/real_00687.jpg
Detected 1 faces in real_00687.jpg.
Execution loop =  247 for file:  training_images/real_00693.jpg
Detected 1 faces in real_00693.jpg.
Execution loop =  248 for file:  training_images/real_01002.jpg
Detected 1 faces in real_01002.jpg.
Execution loop =  249 for file:  training_images/real_00308.jpg
Detected 1 faces in real_00308.jpg.
Execution loop =  250 for file:  training_images/real_01016.jpg
Detected 1 faces in real_01016.jpg.
Execution loop =  251 for file:  training_images/real_00446.jpg
Detected 1 faces in real_00446.jpg.
Execution loop =  252 for file:  training_images/real_00320.jpg
Detected 0 faces in real_00320.jpg.
Execution loop =  253 for file:  training_images/real_00334.jpg
Detected 1 faces in real_00334.jpg.
Execution loop =  254 for file:  training_images/real_00452.jpg
Detected 1 faces in real_00452.jpg.
Execution loop =  255 for file:  training_images/real_00485.jpg
Detected 1 faces in real_00485.jpg.
Execution loop =  256 for file:  training_images/real_00491.jpg
Detected 1 faces in real_00491.jpg.
Execution loop =  257 for file:  training_images/real_00490.jpg
Detected 1 faces in real_00490.jpg.
Execution loop =  258 for file:  training_images/real_00484.jpg
Detected 0 faces in real_00484.jpg.
Execution loop =  259 for file:  training_images/real_00335.jpg
Detected 0 faces in real_00335.jpg.
Execution loop =  260 for file:  training_images/real_00453.jpg
Detected 1 faces in real_00453.jpg.
Execution loop =  261 for file:  training_images/real_00447.jpg
Detected 1 faces in real_00447.jpg.
Execution loop =  262 for file:  training_images/real_00321.jpg
Detected 1 faces in real_00321.jpg.
Execution loop =  263 for file:  training_images/real_01017.jpg
Detected 1 faces in real_01017.jpg.
Execution loop =  264 for file:  training_images/real_00309.jpg
Detected 0 faces in real_00309.jpg.
Execution loop =  265 for file:  training_images/real_01003.jpg
Detected 1 faces in real_01003.jpg.
Execution loop =  266 for file:  training_images/real_00692.jpg
Detected 0 faces in real_00692.jpg.
Execution loop =  267 for file:  training_images/real_00686.jpg
Detected 0 faces in real_00686.jpg.
Execution loop =  268 for file:  training_images/real_00876.jpg
Detected 1 faces in real_00876.jpg.
Execution loop =  269 for file:  training_images/real_00862.jpg
Detected 1 faces in real_00862.jpg.
Execution loop =  270 for file:  training_images/real_00889.jpg
Detected 1 faces in real_00889.jpg.
Execution loop =  271 for file:  training_images/real_00651.jpg
Detected 1 faces in real_00651.jpg.
Execution loop =  272 for file:  training_images/real_00137.jpg
Detected 1 faces in real_00137.jpg.
Execution loop =  273 for file:  training_images/real_00123.jpg
Detected 1 faces in real_00123.jpg.
Execution loop =  274 for file:  training_images/real_00645.jpg
Detected 1 faces in real_00645.jpg.
Execution loop =  275 for file:  training_images/real_00679.jpg
Detected 1 faces in real_00679.jpg.
Execution loop =  276 for file:  training_images/real_00080.jpg
Detected 1 faces in real_00080.jpg.
Execution loop =  277 for file:  training_images/real_00094.jpg
Detected 1 faces in real_00094.jpg.
Execution loop =  278 for file:  training_images/real_00902.jpg
Detected 1 faces in real_00902.jpg.
Execution loop =  279 for file:  training_images/real_00916.jpg
Detected 1 faces in real_00916.jpg.
Execution loop =  280 for file:  training_images/real_00725.jpg
Detected 1 faces in real_00725.jpg.
Execution loop =  281 for file:  training_images/real_00043.jpg
Detected 1 faces in real_00043.jpg.
Execution loop =  282 for file:  training_images/real_00057.jpg
Detected 0 faces in real_00057.jpg.
Execution loop =  283 for file:  training_images/real_00731.jpg
Detected 1 faces in real_00731.jpg.
Execution loop =  284 for file:  training_images/real_00719.jpg
Detected 1 faces in real_00719.jpg.
Execution loop =  285 for file:  training_images/real_00282.jpg
Detected 0 faces in real_00282.jpg.
Execution loop =  286 for file:  training_images/real_00296.jpg
Detected 1 faces in real_00296.jpg.
Execution loop =  287 for file:  training_images/real_00241.jpg
Detected 1 faces in real_00241.jpg.
Execution loop =  288 for file:  training_images/real_00527.jpg
Detected 1 faces in real_00527.jpg.
Execution loop =  289 for file:  training_images/real_00533.jpg
Detected 1 faces in real_00533.jpg.
Execution loop =  290 for file:  training_images/real_00255.jpg
Detected 1 faces in real_00255.jpg.
Execution loop =  291 for file:  training_images/real_00269.jpg
Detected 0 faces in real_00269.jpg.
Execution loop =  292 for file:  training_images/real_00554.jpg
Detected 1 faces in real_00554.jpg.
Execution loop =  293 for file:  training_images/real_00232.jpg
Detected 1 faces in real_00232.jpg.
Execution loop =  294 for file:  training_images/real_00226.jpg
Detected 1 faces in real_00226.jpg.
Execution loop =  295 for file:  training_images/real_00540.jpg
Detected 1 faces in real_00540.jpg.
Execution loop =  296 for file:  training_images/real_00568.jpg
Detected 1 faces in real_00568.jpg.
Execution loop =  297 for file:  training_images/real_00597.jpg
Detected 1 faces in real_00597.jpg.
Execution loop =  298 for file:  training_images/real_00583.jpg
Detected 1 faces in real_00583.jpg.
Execution loop =  299 for file:  training_images/real_00030.jpg
Detected 1 faces in real_00030.jpg.
Execution loop =  300 for file:  training_images/real_00756.jpg
Detected 1 faces in real_00756.jpg.
Execution loop =  301 for file:  training_images/real_00742.jpg
Detected 0 faces in real_00742.jpg.
Execution loop =  302 for file:  training_images/real_00024.jpg
Detected 1 faces in real_00024.jpg.
Execution loop =  303 for file:  training_images/real_00018.jpg
Detected 0 faces in real_00018.jpg.
Execution loop =  304 for file:  training_images/real_00795.jpg
Detected 1 faces in real_00795.jpg.
Execution loop =  305 for file:  training_images/real_00781.jpg
Detected 1 faces in real_00781.jpg.
Execution loop =  306 for file:  training_images/real_00959.jpg
Detected 1 faces in real_00959.jpg.
Execution loop =  307 for file:  training_images/real_00971.jpg
Detected 0 faces in real_00971.jpg.
Execution loop =  308 for file:  training_images/real_00965.jpg
Detected 1 faces in real_00965.jpg.
Execution loop =  309 for file:  training_images/real_00144.jpg
Detected 1 faces in real_00144.jpg.
Execution loop =  310 for file:  training_images/real_00622.jpg
Detected 2 faces in real_00622.jpg.
Execution loop =  311 for file:  training_images/real_00636.jpg
Detected 1 faces in real_00636.jpg.
Execution loop =  312 for file:  training_images/real_00150.jpg
Detected 1 faces in real_00150.jpg.
Execution loop =  313 for file:  training_images/real_00178.jpg
Detected 1 faces in real_00178.jpg.
Execution loop =  314 for file:  training_images/real_00187.jpg
Detected 1 faces in real_00187.jpg.
Execution loop =  315 for file:  training_images/real_00839.jpg
Detected 1 faces in real_00839.jpg.
Execution loop =  316 for file:  training_images/real_00193.jpg
Detected 0 faces in real_00193.jpg.
Execution loop =  317 for file:  training_images/real_00805.jpg
Detected 1 faces in real_00805.jpg.
Execution loop =  318 for file:  training_images/real_00811.jpg
Detected 1 faces in real_00811.jpg.
Execution loop =  319 for file:  training_images/real_00420.jpg
Detected 1 faces in real_00420.jpg.
Execution loop =  320 for file:  training_images/real_00346.jpg
Detected 1 faces in real_00346.jpg.
Execution loop =  321 for file:  training_images/real_01058.jpg
Detected 1 faces in real_01058.jpg.
Execution loop =  322 for file:  training_images/real_00352.jpg
Detected 1 faces in real_00352.jpg.
Execution loop =  323 for file:  training_images/real_00434.jpg
Detected 1 faces in real_00434.jpg.
Execution loop =  324 for file:  training_images/real_01064.jpg
Detected 1 faces in real_01064.jpg.
Execution loop =  325 for file:  training_images/real_01070.jpg
Detected 1 faces in real_01070.jpg.
Execution loop =  326 for file:  training_images/real_00408.jpg
Detected 1 faces in real_00408.jpg.
Execution loop =  327 for file:  training_images/real_00385.jpg
Detected 1 faces in real_00385.jpg.
Execution loop =  328 for file:  training_images/real_00391.jpg
Detected 1 faces in real_00391.jpg.
Execution loop =  329 for file:  training_images/real_00390.jpg
Detected 1 faces in real_00390.jpg.
Execution loop =  330 for file:  training_images/real_00384.jpg
Detected 0 faces in real_00384.jpg.
Execution loop =  331 for file:  training_images/real_01071.jpg
Detected 1 faces in real_01071.jpg.
Execution loop =  332 for file:  training_images/real_00409.jpg
Detected 1 faces in real_00409.jpg.
Execution loop =  333 for file:  training_images/real_01065.jpg
Detected 1 faces in real_01065.jpg.
Execution loop =  334 for file:  training_images/real_00353.jpg
Detected 1 faces in real_00353.jpg.
Execution loop =  335 for file:  training_images/real_00435.jpg
Detected 0 faces in real_00435.jpg.
Execution loop =  336 for file:  training_images/real_00421.jpg
Detected 1 faces in real_00421.jpg.
Execution loop =  337 for file:  training_images/real_01059.jpg
Detected 1 faces in real_01059.jpg.
Execution loop =  338 for file:  training_images/real_00347.jpg
Detected 0 faces in real_00347.jpg.
Execution loop =  339 for file:  training_images/real_00810.jpg
Detected 1 faces in real_00810.jpg.
Execution loop =  340 for file:  training_images/real_00804.jpg
Detected 0 faces in real_00804.jpg.
Execution loop =  341 for file:  training_images/real_00192.jpg
Detected 1 faces in real_00192.jpg.
Execution loop =  342 for file:  training_images/real_00186.jpg
Detected 1 faces in real_00186.jpg.
Execution loop =  343 for file:  training_images/real_00838.jpg
Detected 1 faces in real_00838.jpg.
Execution loop =  344 for file:  training_images/real_00495(1).jpg
Detected 1 faces in real_00495(1).jpg.
Execution loop =  345 for file:  training_images/real_00179.jpg
Detected 1 faces in real_00179.jpg.
Execution loop =  346 for file:  training_images/real_00637.jpg
Detected 1 faces in real_00637.jpg.
Execution loop =  347 for file:  training_images/real_00151.jpg
Detected 1 faces in real_00151.jpg.
Execution loop =  348 for file:  training_images/real_00145.jpg
Detected 1 faces in real_00145.jpg.
Execution loop =  349 for file:  training_images/real_00623.jpg
Detected 0 faces in real_00623.jpg.
Execution loop =  350 for file:  training_images/real_00964.jpg
Detected 1 faces in real_00964.jpg.
Execution loop =  351 for file:  training_images/real_00970.jpg
Detected 0 faces in real_00970.jpg.
Execution loop =  352 for file:  training_images/real_00958.jpg
Detected 1 faces in real_00958.jpg.
Execution loop =  353 for file:  training_images/real_00780.jpg
Detected 1 faces in real_00780.jpg.
Execution loop =  354 for file:  training_images/real_00794.jpg
Detected 1 faces in real_00794.jpg.
Execution loop =  355 for file:  training_images/real_00019.jpg
Detected 1 faces in real_00019.jpg.
Execution loop =  356 for file:  training_images/real_00743.jpg
Detected 2 faces in real_00743.jpg.
Execution loop =  357 for file:  training_images/real_00025.jpg
Detected 1 faces in real_00025.jpg.
Execution loop =  358 for file:  training_images/real_00031.jpg
Detected 1 faces in real_00031.jpg.
Execution loop =  359 for file:  training_images/real_00757.jpg
Detected 1 faces in real_00757.jpg.
Execution loop =  360 for file:  training_images/real_00582.jpg
Detected 1 faces in real_00582.jpg.
Execution loop =  361 for file:  training_images/real_00596.jpg
Detected 2 faces in real_00596.jpg.
Execution loop =  362 for file:  training_images/real_00569.jpg
Detected 1 faces in real_00569.jpg.
Execution loop =  363 for file:  training_images/real_00227.jpg
Detected 1 faces in real_00227.jpg.
Execution loop =  364 for file:  training_images/real_00541.jpg
Detected 1 faces in real_00541.jpg.
Execution loop =  365 for file:  training_images/real_00555.jpg
Detected 1 faces in real_00555.jpg.
Execution loop =  366 for file:  training_images/real_00233.jpg
Detected 1 faces in real_00233.jpg.
Execution loop =  367 for file:  training_images/real_00543.jpg
Detected 1 faces in real_00543.jpg.
Execution loop =  368 for file:  training_images/real_00225.jpg
Detected 1 faces in real_00225.jpg.
Execution loop =  369 for file:  training_images/real_00231.jpg
Detected 1 faces in real_00231.jpg.
Execution loop =  370 for file:  training_images/real_00557.jpg
Detected 1 faces in real_00557.jpg.
Execution loop =  371 for file:  training_images/real_00219.jpg
Detected 2 faces in real_00219.jpg.
Execution loop =  372 for file:  training_images/real_00580.jpg
Detected 0 faces in real_00580.jpg.
Execution loop =  373 for file:  training_images/real_00594.jpg
Detected 1 faces in real_00594.jpg.
Execution loop =  374 for file:  training_images/real_00027.jpg
Detected 1 faces in real_00027.jpg.
Execution loop =  375 for file:  training_images/real_00999.jpg
Detected 1 faces in real_00999.jpg.
Execution loop =  376 for file:  training_images/real_00741.jpg
Detected 1 faces in real_00741.jpg.
Execution loop =  377 for file:  training_images/real_00755.jpg
Detected 1 faces in real_00755.jpg.
Execution loop =  378 for file:  training_images/real_00033.jpg
Detected 1 faces in real_00033.jpg.
Execution loop =  379 for file:  training_images/real_00769.jpg
Detected 1 faces in real_00769.jpg.
Execution loop =  380 for file:  training_images/real_00782.jpg
Detected 1 faces in real_00782.jpg.
Execution loop =  381 for file:  training_images/real_00796.jpg
Detected 1 faces in real_00796.jpg.
Execution loop =  382 for file:  training_images/real_00966.jpg
Detected 1 faces in real_00966.jpg.
Execution loop =  383 for file:  training_images/real_00972.jpg
Detected 1 faces in real_00972.jpg.
Execution loop =  384 for file:  training_images/real_00153.jpg
Detected 1 faces in real_00153.jpg.
Execution loop =  385 for file:  training_images/real_00635.jpg
Detected 1 faces in real_00635.jpg.
Execution loop =  386 for file:  training_images/real_00621.jpg
Detected 1 faces in real_00621.jpg.
Execution loop =  387 for file:  training_images/real_00147.jpg
Detected 0 faces in real_00147.jpg.
Execution loop =  388 for file:  training_images/real_00609.jpg
Detected 0 faces in real_00609.jpg.
Execution loop =  389 for file:  training_images/real_00190.jpg
Detected 1 faces in real_00190.jpg.
Execution loop =  390 for file:  training_images/real_00184.jpg
Detected 1 faces in real_00184.jpg.
Execution loop =  391 for file:  training_images/real_00812.jpg
Detected 1 faces in real_00812.jpg.
Execution loop =  392 for file:  training_images/real_00806.jpg
Detected 1 faces in real_00806.jpg.
Execution loop =  393 for file:  training_images/real_00437.jpg
Detected 1 faces in real_00437.jpg.
Execution loop =  394 for file:  training_images/real_00351.jpg
Detected 1 faces in real_00351.jpg.
Execution loop =  395 for file:  training_images/real_00345.jpg
Detected 1 faces in real_00345.jpg.
Execution loop =  396 for file:  training_images/real_00423.jpg
Detected 1 faces in real_00423.jpg.
Execution loop =  397 for file:  training_images/real_01073.jpg
Detected 1 faces in real_01073.jpg.
Execution loop =  398 for file:  training_images/real_00379.jpg
Detected 1 faces in real_00379.jpg.
Execution loop =  399 for file:  training_images/real_01067.jpg
Detected 1 faces in real_01067.jpg.
Execution loop =  400 for file:  training_images/real_00392.jpg
Detected 1 faces in real_00392.jpg.
Execution loop =  401 for file:  training_images/real_00386.jpg
Detected 1 faces in real_00386.jpg.
Execution loop =  402 for file:  training_images/real_00387.jpg
Detected 1 faces in real_00387.jpg.
Execution loop =  403 for file:  training_images/real_00393.jpg
Detected 1 faces in real_00393.jpg.
Execution loop =  404 for file:  training_images/real_01066.jpg
Detected 1 faces in real_01066.jpg.
Execution loop =  405 for file:  training_images/real_00378.jpg
Detected 1 faces in real_00378.jpg.
Execution loop =  406 for file:  training_images/real_01072.jpg
Detected 1 faces in real_01072.jpg.
Execution loop =  407 for file:  training_images/real_00344.jpg
Detected 1 faces in real_00344.jpg.
Execution loop =  408 for file:  training_images/real_00422.jpg
Detected 1 faces in real_00422.jpg.
Execution loop =  409 for file:  training_images/real_00436.jpg
Detected 1 faces in real_00436.jpg.
Execution loop =  410 for file:  training_images/real_00350.jpg
Detected 0 faces in real_00350.jpg.
Execution loop =  411 for file:  training_images/real_00807.jpg
Detected 0 faces in real_00807.jpg.
Execution loop =  412 for file:  training_images/real_00813.jpg
Detected 1 faces in real_00813.jpg.
Execution loop =  413 for file:  training_images/real_00185.jpg
Detected 1 faces in real_00185.jpg.
Execution loop =  414 for file:  training_images/real_00191.jpg
Detected 1 faces in real_00191.jpg.
Execution loop =  415 for file:  training_images/real_00608.jpg
Detected 0 faces in real_00608.jpg.
Execution loop =  416 for file:  training_images/real_00620.jpg
Detected 1 faces in real_00620.jpg.
Execution loop =  417 for file:  training_images/real_00146.jpg
Detected 0 faces in real_00146.jpg.
Execution loop =  418 for file:  training_images/real_00152.jpg
Detected 1 faces in real_00152.jpg.
Execution loop =  419 for file:  training_images/real_00634.jpg
Detected 1 faces in real_00634.jpg.
Execution loop =  420 for file:  training_images/real_00973.jpg
Detected 1 faces in real_00973.jpg.
Execution loop =  421 for file:  training_images/real_00967.jpg
Detected 1 faces in real_00967.jpg.
Execution loop =  422 for file:  training_images/real_00797.jpg
Detected 0 faces in real_00797.jpg.
Execution loop =  423 for file:  training_images/real_00783.jpg
Detected 1 faces in real_00783.jpg.
Execution loop =  424 for file:  training_images/real_00768.jpg
Detected 1 faces in real_00768.jpg.
Execution loop =  425 for file:  training_images/real_00754.jpg
Detected 1 faces in real_00754.jpg.
Execution loop =  426 for file:  training_images/real_00032.jpg
Detected 1 faces in real_00032.jpg.
Execution loop =  427 for file:  training_images/real_00026.jpg
Detected 2 faces in real_00026.jpg.
Execution loop =  428 for file:  training_images/real_00740.jpg
Detected 1 faces in real_00740.jpg.
Execution loop =  429 for file:  training_images/real_00998.jpg
Detected 1 faces in real_00998.jpg.
Execution loop =  430 for file:  training_images/real_00595.jpg
Detected 1 faces in real_00595.jpg.
Execution loop =  431 for file:  training_images/real_00581.jpg
Detected 1 faces in real_00581.jpg.
Execution loop =  432 for file:  training_images/real_00218.jpg
Detected 1 faces in real_00218.jpg.
Execution loop =  433 for file:  training_images/real_00230.jpg
Detected 1 faces in real_00230.jpg.
Execution loop =  434 for file:  training_images/real_00556.jpg
Detected 1 faces in real_00556.jpg.
Execution loop =  435 for file:  training_images/real_00542.jpg
Detected 2 faces in real_00542.jpg.
Execution loop =  436 for file:  training_images/real_00224.jpg
Detected 0 faces in real_00224.jpg.
Execution loop =  437 for file:  training_images/real_00208.jpg
Detected 1 faces in real_00208.jpg.
Execution loop =  438 for file:  training_images/real_00220.jpg
Detected 1 faces in real_00220.jpg.
Execution loop =  439 for file:  training_images/real_00546.jpg
Detected 1 faces in real_00546.jpg.
Execution loop =  440 for file:  training_images/real_00552.jpg
Detected 1 faces in real_00552.jpg.
Execution loop =  441 for file:  training_images/real_00234.jpg
Detected 1 faces in real_00234.jpg.
Execution loop =  442 for file:  training_images/real_00585.jpg
Detected 1 faces in real_00585.jpg.
Execution loop =  443 for file:  training_images/real_00591.jpg
Detected 1 faces in real_00591.jpg.
Execution loop =  444 for file:  training_images/real_00778.jpg
Detected 1 faces in real_00778.jpg.
Execution loop =  445 for file:  training_images/real_00744.jpg
Detected 1 faces in real_00744.jpg.
Execution loop =  446 for file:  training_images/real_00022.jpg
Detected 1 faces in real_00022.jpg.
Execution loop =  447 for file:  training_images/real_00036.jpg
Detected 1 faces in real_00036.jpg.
Execution loop =  448 for file:  training_images/real_00988.jpg
Detected 1 faces in real_00988.jpg.
Execution loop =  449 for file:  training_images/real_00750.jpg
Detected 1 faces in real_00750.jpg.
Execution loop =  450 for file:  training_images/real_00963.jpg
Detected 1 faces in real_00963.jpg.
Execution loop =  451 for file:  training_images/real_00977.jpg
Detected 2 faces in real_00977.jpg.
Execution loop =  452 for file:  training_images/real_00787.jpg
Detected 1 faces in real_00787.jpg.
Execution loop =  453 for file:  training_images/real_00793.jpg
Detected 0 faces in real_00793.jpg.
Execution loop =  454 for file:  training_images/real_00618.jpg
Detected 1 faces in real_00618.jpg.
Execution loop =  455 for file:  training_images/real_00630.jpg
Detected 0 faces in real_00630.jpg.
Execution loop =  456 for file:  training_images/real_00156.jpg
Detected 1 faces in real_00156.jpg.
Execution loop =  457 for file:  training_images/real_00142.jpg
Detected 1 faces in real_00142.jpg.
Execution loop =  458 for file:  training_images/real_00624.jpg
Detected 1 faces in real_00624.jpg.
Execution loop =  459 for file:  training_images/real_00817.jpg
Detected 1 faces in real_00817.jpg.
Execution loop =  460 for file:  training_images/real_00803.jpg
Detected 1 faces in real_00803.jpg.
Execution loop =  461 for file:  training_images/real_00195.jpg
Detected 1 faces in real_00195.jpg.
Execution loop =  462 for file:  training_images/real_00181.jpg
Detected 1 faces in real_00181.jpg.
Execution loop =  463 for file:  training_images/real_00368.jpg
Detected 1 faces in real_00368.jpg.
Execution loop =  464 for file:  training_images/real_01076.jpg
Detected 1 faces in real_01076.jpg.
Execution loop =  465 for file:  training_images/real_01062.jpg
Detected 1 faces in real_01062.jpg.
Execution loop =  466 for file:  training_images/real_00354.jpg
Detected 2 faces in real_00354.jpg.
Execution loop =  467 for file:  training_images/real_00432.jpg
Detected 1 faces in real_00432.jpg.
Execution loop =  468 for file:  training_images/real_00426.jpg
Detected 0 faces in real_00426.jpg.
Execution loop =  469 for file:  training_images/real_00340.jpg
Detected 1 faces in real_00340.jpg.
Execution loop =  470 for file:  training_images/real_00397.jpg
Detected 1 faces in real_00397.jpg.
Execution loop =  471 for file:  training_images/real_00383.jpg
Detected 1 faces in real_00383.jpg.
Execution loop =  472 for file:  training_images/real_00382.jpg
Detected 1 faces in real_00382.jpg.
Execution loop =  473 for file:  training_images/real_00396.jpg
Detected 1 faces in real_00396.jpg.
Execution loop =  474 for file:  training_images/real_00427.jpg
Detected 1 faces in real_00427.jpg.
Execution loop =  475 for file:  training_images/real_00341.jpg
Detected 0 faces in real_00341.jpg.
Execution loop =  476 for file:  training_images/real_00355.jpg
Detected 1 faces in real_00355.jpg.
Execution loop =  477 for file:  training_images/real_00433.jpg
Detected 0 faces in real_00433.jpg.
Execution loop =  478 for file:  training_images/real_01063.jpg
Detected 1 faces in real_01063.jpg.
Execution loop =  479 for file:  training_images/real_01077.jpg
Detected 1 faces in real_01077.jpg.
Execution loop =  480 for file:  training_images/real_00369.jpg
Detected 0 faces in real_00369.jpg.
Execution loop =  481 for file:  training_images/real_00180.jpg
Detected 1 faces in real_00180.jpg.
Execution loop =  482 for file:  training_images/real_00194.jpg
Detected 1 faces in real_00194.jpg.
Execution loop =  483 for file:  training_images/real_00802.jpg
Detected 1 faces in real_00802.jpg.
Execution loop =  484 for file:  training_images/real_00816.jpg
Detected 1 faces in real_00816.jpg.
Execution loop =  485 for file:  training_images/real_00143.jpg
Detected 1 faces in real_00143.jpg.
Execution loop =  486 for file:  training_images/real_00625.jpg
Detected 1 faces in real_00625.jpg.
Execution loop =  487 for file:  training_images/real_00631.jpg
Detected 1 faces in real_00631.jpg.
Execution loop =  488 for file:  training_images/real_00157.jpg
Detected 1 faces in real_00157.jpg.
Execution loop =  489 for file:  training_images/real_00619.jpg
Detected 1 faces in real_00619.jpg.
Execution loop =  490 for file:  training_images/real_00792.jpg
Detected 1 faces in real_00792.jpg.
Execution loop =  491 for file:  training_images/real_00786.jpg
Detected 1 faces in real_00786.jpg.
Execution loop =  492 for file:  training_images/real_00976.jpg
Detected 1 faces in real_00976.jpg.
Execution loop =  493 for file:  training_images/real_00962.jpg
Detected 0 faces in real_00962.jpg.
Execution loop =  494 for file:  training_images/real_00037.jpg
Detected 1 faces in real_00037.jpg.
Execution loop =  495 for file:  training_images/real_00751.jpg
Detected 1 faces in real_00751.jpg.
Execution loop =  496 for file:  training_images/real_00989.jpg
Detected 1 faces in real_00989.jpg.
Execution loop =  497 for file:  training_images/real_00745.jpg
Detected 1 faces in real_00745.jpg.
Execution loop =  498 for file:  training_images/real_00023.jpg
Detected 1 faces in real_00023.jpg.
Execution loop =  499 for file:  training_images/real_00779.jpg
Detected 1 faces in real_00779.jpg.
Execution loop =  500 for file:  training_images/real_00590.jpg
Detected 1 faces in real_00590.jpg.
Execution loop =  501 for file:  training_images/real_00584.jpg
Detected 1 faces in real_00584.jpg.
Execution loop =  502 for file:  training_images/real_00553.jpg
Detected 1 faces in real_00553.jpg.
Execution loop =  503 for file:  training_images/real_00235.jpg
Detected 1 faces in real_00235.jpg.
Execution loop =  504 for file:  training_images/real_00221.jpg
Detected 1 faces in real_00221.jpg.
Execution loop =  505 for file:  training_images/real_00547.jpg
Detected 1 faces in real_00547.jpg.
Execution loop =  506 for file:  training_images/real_00209.jpg
Detected 1 faces in real_00209.jpg.
Execution loop =  507 for file:  training_images/real_00579.jpg
Detected 1 faces in real_00579.jpg.
Execution loop =  508 for file:  training_images/real_00237.jpg
Detected 1 faces in real_00237.jpg.
Execution loop =  509 for file:  training_images/real_00551.jpg
Detected 1 faces in real_00551.jpg.
Execution loop =  510 for file:  training_images/real_00545.jpg
Detected 1 faces in real_00545.jpg.
Execution loop =  511 for file:  training_images/real_00223.jpg
Detected 0 faces in real_00223.jpg.
Execution loop =  512 for file:  training_images/real_00592.jpg
Detected 1 faces in real_00592.jpg.
Execution loop =  513 for file:  training_images/real_00586.jpg
Detected 1 faces in real_00586.jpg.
Execution loop =  514 for file:  training_images/real_00009.jpg
Detected 0 faces in real_00009.jpg.
Execution loop =  515 for file:  training_images/real_00753.jpg
Detected 1 faces in real_00753.jpg.
Execution loop =  516 for file:  training_images/real_00035.jpg
Detected 1 faces in real_00035.jpg.
Execution loop =  517 for file:  training_images/real_00021.jpg
Detected 0 faces in real_00021.jpg.
Execution loop =  518 for file:  training_images/real_00747.jpg
Detected 1 faces in real_00747.jpg.
Execution loop =  519 for file:  training_images/real_00974.jpg
Detected 1 faces in real_00974.jpg.
Execution loop =  520 for file:  training_images/real_00960.jpg
Detected 1 faces in real_00960.jpg.
Execution loop =  521 for file:  training_images/real_00790.jpg
Detected 1 faces in real_00790.jpg.
Execution loop =  522 for file:  training_images/real_00948.jpg
Detected 1 faces in real_00948.jpg.
Execution loop =  523 for file:  training_images/real_00784.jpg
Detected 1 faces in real_00784.jpg.
Execution loop =  524 for file:  training_images/real_00169.jpg
Detected 1 faces in real_00169.jpg.
Execution loop =  525 for file:  training_images/real_00627.jpg
Detected 0 faces in real_00627.jpg.
Execution loop =  526 for file:  training_images/real_00141.jpg
Detected 1 faces in real_00141.jpg.
Execution loop =  527 for file:  training_images/real_00155.jpg
Detected 0 faces in real_00155.jpg.
Execution loop =  528 for file:  training_images/real_00633.jpg
Detected 1 faces in real_00633.jpg.
Execution loop =  529 for file:  training_images/real_00800.jpg
Detected 0 faces in real_00800.jpg.
Execution loop =  530 for file:  training_images/real_00814.jpg
Detected 1 faces in real_00814.jpg.
Execution loop =  531 for file:  training_images/real_00182.jpg
Detected 1 faces in real_00182.jpg.
Execution loop =  532 for file:  training_images/real_00196.jpg
Detected 1 faces in real_00196.jpg.
Execution loop =  533 for file:  training_images/real_00828.jpg
Detected 1 faces in real_00828.jpg.
Execution loop =  534 for file:  training_images/real_01061.jpg
Detected 1 faces in real_01061.jpg.
Execution loop =  535 for file:  training_images/real_00419.jpg
Detected 1 faces in real_00419.jpg.
Execution loop =  536 for file:  training_images/real_01075.jpg
Detected 1 faces in real_01075.jpg.
Execution loop =  537 for file:  training_images/real_00343.jpg
Detected 1 faces in real_00343.jpg.
Execution loop =  538 for file:  training_images/real_00425.jpg
Detected 1 faces in real_00425.jpg.
Execution loop =  539 for file:  training_images/real_00431.jpg
Detected 1 faces in real_00431.jpg.
Execution loop =  540 for file:  training_images/real_00357.jpg
Detected 1 faces in real_00357.jpg.
Execution loop =  541 for file:  training_images/real_01049.jpg
Detected 1 faces in real_01049.jpg.
Execution loop =  542 for file:  training_images/real_00380.jpg
Detected 1 faces in real_00380.jpg.
Execution loop =  543 for file:  training_images/real_00394.jpg
Detected 1 faces in real_00394.jpg.
Execution loop =  544 for file:  training_images/real_00395.jpg
Detected 1 faces in real_00395.jpg.
Execution loop =  545 for file:  training_images/real_00381.jpg
Detected 1 faces in real_00381.jpg.
Execution loop =  546 for file:  training_images/real_00430.jpg
Detected 1 faces in real_00430.jpg.
Execution loop =  547 for file:  training_images/real_01048.jpg
Detected 1 faces in real_01048.jpg.
Execution loop =  548 for file:  training_images/real_00356.jpg
Detected 1 faces in real_00356.jpg.
Execution loop =  549 for file:  training_images/real_00342.jpg
Detected 0 faces in real_00342.jpg.
Execution loop =  550 for file:  training_images/real_00424.jpg
Detected 1 faces in real_00424.jpg.
Execution loop =  551 for file:  training_images/real_01074.jpg
Detected 1 faces in real_01074.jpg.
Execution loop =  552 for file:  training_images/real_01060.jpg
Detected 1 faces in real_01060.jpg.
Execution loop =  553 for file:  training_images/real_00418.jpg
Detected 1 faces in real_00418.jpg.
Execution loop =  554 for file:  training_images/real_00197.jpg
Detected 1 faces in real_00197.jpg.
Execution loop =  555 for file:  training_images/real_00829.jpg
Detected 1 faces in real_00829.jpg.
Execution loop =  556 for file:  training_images/real_00183.jpg
Detected 1 faces in real_00183.jpg.
Execution loop =  557 for file:  training_images/real_00815.jpg
Detected 1 faces in real_00815.jpg.
Execution loop =  558 for file:  training_images/real_00801.jpg
Detected 1 faces in real_00801.jpg.
Execution loop =  559 for file:  training_images/real_00154.jpg
Detected 1 faces in real_00154.jpg.
Execution loop =  560 for file:  training_images/real_00632.jpg
Detected 0 faces in real_00632.jpg.
Execution loop =  561 for file:  training_images/real_00626.jpg
Detected 1 faces in real_00626.jpg.
Execution loop =  562 for file:  training_images/real_00140.jpg
Detected 1 faces in real_00140.jpg.
Execution loop =  563 for file:  training_images/real_00168.jpg
Detected 1 faces in real_00168.jpg.
Execution loop =  564 for file:  training_images/real_00785.jpg
Detected 1 faces in real_00785.jpg.
Execution loop =  565 for file:  training_images/real_00949.jpg
Detected 2 faces in real_00949.jpg.
Execution loop =  566 for file:  training_images/real_00791.jpg
Detected 1 faces in real_00791.jpg.
Execution loop =  567 for file:  training_images/real_00961.jpg
Detected 1 faces in real_00961.jpg.
Execution loop =  568 for file:  training_images/real_00975.jpg
Detected 1 faces in real_00975.jpg.
Execution loop =  569 for file:  training_images/real_00020.jpg
Detected 0 faces in real_00020.jpg.
Execution loop =  570 for file:  training_images/real_00746.jpg
Detected 0 faces in real_00746.jpg.
Execution loop =  571 for file:  training_images/real_00752.jpg
Detected 1 faces in real_00752.jpg.
Execution loop =  572 for file:  training_images/real_00034.jpg
Detected 0 faces in real_00034.jpg.
Execution loop =  573 for file:  training_images/real_00008.jpg
Detected 2 faces in real_00008.jpg.
Execution loop =  574 for file:  training_images/real_00587.jpg
Detected 1 faces in real_00587.jpg.
Execution loop =  575 for file:  training_images/real_00593.jpg
Detected 2 faces in real_00593.jpg.
Execution loop =  576 for file:  training_images/real_00544.jpg
Detected 0 faces in real_00544.jpg.
Execution loop =  577 for file:  training_images/real_00222.jpg
Detected 1 faces in real_00222.jpg.
Execution loop =  578 for file:  training_images/real_00236.jpg
Detected 1 faces in real_00236.jpg.
Execution loop =  579 for file:  training_images/real_00550.jpg
Detected 1 faces in real_00550.jpg.
Execution loop =  580 for file:  training_images/real_00578.jpg
Detected 1 faces in real_00578.jpg.
Execution loop =  581 for file:  training_images/real_00575.jpg
Detected 1 faces in real_00575.jpg.
Execution loop =  582 for file:  training_images/real_00213.jpg
Detected 1 faces in real_00213.jpg.
Execution loop =  583 for file:  training_images/real_00207.jpg
Detected 1 faces in real_00207.jpg.
Execution loop =  584 for file:  training_images/real_00561.jpg
Detected 1 faces in real_00561.jpg.
Execution loop =  585 for file:  training_images/real_00549.jpg
Detected 1 faces in real_00549.jpg.
Execution loop =  586 for file:  training_images/real_00011.jpg
Detected 1 faces in real_00011.jpg.
Execution loop =  587 for file:  training_images/real_00777.jpg
Detected 1 faces in real_00777.jpg.
Execution loop =  588 for file:  training_images/real_00763.jpg
Detected 1 faces in real_00763.jpg.
Execution loop =  589 for file:  training_images/real_00005.jpg
Detected 0 faces in real_00005.jpg.
Execution loop =  590 for file:  training_images/real_00993.jpg
Detected 1 faces in real_00993.jpg.
Execution loop =  591 for file:  training_images/real_00987.jpg
Detected 1 faces in real_00987.jpg.
Execution loop =  592 for file:  training_images/real_00039.jpg
Detected 0 faces in real_00039.jpg.
Execution loop =  593 for file:  training_images/real_00978.jpg
Detected 1 faces in real_00978.jpg.
Execution loop =  594 for file:  training_images/real_00788.jpg
Detected 0 faces in real_00788.jpg.
Execution loop =  595 for file:  training_images/real_00950.jpg
Detected 1 faces in real_00950.jpg.
Execution loop =  596 for file:  training_images/real_00944.jpg
Detected 1 faces in real_00944.jpg.
Execution loop =  597 for file:  training_images/real_00165.jpg
Detected 2 faces in real_00165.jpg.
Execution loop =  598 for file:  training_images/real_00603.jpg
Detected 1 faces in real_00603.jpg.
Execution loop =  599 for file:  training_images/real_00617.jpg
Detected 1 faces in real_00617.jpg.
Execution loop =  600 for file:  training_images/real_00171.jpg
Detected 1 faces in real_00171.jpg.
Execution loop =  601 for file:  training_images/real_00159.jpg
Detected 1 faces in real_00159.jpg.
Execution loop =  602 for file:  training_images/real_00818.jpg
Detected 0 faces in real_00818.jpg.
Execution loop =  603 for file:  training_images/real_00824.jpg
Detected 1 faces in real_00824.jpg.
Execution loop =  604 for file:  training_images/real_00830.jpg
Detected 1 faces in real_00830.jpg.
Execution loop =  605 for file:  training_images/real_00401.jpg
Detected 1 faces in real_00401.jpg.
Execution loop =  606 for file:  training_images/real_00367.jpg
Detected 1 faces in real_00367.jpg.
Execution loop =  607 for file:  training_images/real_01079.jpg
Detected 1 faces in real_01079.jpg.
Execution loop =  608 for file:  training_images/real_00373.jpg
Detected 1 faces in real_00373.jpg.
Execution loop =  609 for file:  training_images/real_00415.jpg
Detected 2 faces in real_00415.jpg.
Execution loop =  610 for file:  training_images/real_01045.jpg
Detected 1 faces in real_01045.jpg.
Execution loop =  611 for file:  training_images/real_01051.jpg
Detected 0 faces in real_01051.jpg.
Execution loop =  612 for file:  training_images/real_00429.jpg
Detected 1 faces in real_00429.jpg.
Execution loop =  613 for file:  training_images/real_00398.jpg
Detected 1 faces in real_00398.jpg.
Execution loop =  614 for file:  training_images/real_00399.jpg
Detected 1 faces in real_00399.jpg.
Execution loop =  615 for file:  training_images/real_01050.jpg
Detected 1 faces in real_01050.jpg.
Execution loop =  616 for file:  training_images/real_00428.jpg
Detected 0 faces in real_00428.jpg.
Execution loop =  617 for file:  training_images/real_01044.jpg
Detected 1 faces in real_01044.jpg.
Execution loop =  618 for file:  training_images/real_00372.jpg
Detected 2 faces in real_00372.jpg.
Execution loop =  619 for file:  training_images/real_00414.jpg
Detected 1 faces in real_00414.jpg.
Execution loop =  620 for file:  training_images/real_00400.jpg
Detected 1 faces in real_00400.jpg.
Execution loop =  621 for file:  training_images/real_01078.jpg
Detected 1 faces in real_01078.jpg.
Execution loop =  622 for file:  training_images/real_00366.jpg
Detected 0 faces in real_00366.jpg.
Execution loop =  623 for file:  training_images/real_00831.jpg
Detected 1 faces in real_00831.jpg.
Execution loop =  624 for file:  training_images/real_00825.jpg
Detected 1 faces in real_00825.jpg.
Execution loop =  625 for file:  training_images/real_00819.jpg
Detected 1 faces in real_00819.jpg.
Execution loop =  626 for file:  training_images/real_00158.jpg
Detected 1 faces in real_00158.jpg.
Execution loop =  627 for file:  training_images/real_00616.jpg
Detected 1 faces in real_00616.jpg.
Execution loop =  628 for file:  training_images/real_00170.jpg
Detected 1 faces in real_00170.jpg.
Execution loop =  629 for file:  training_images/real_00164.jpg
Detected 1 faces in real_00164.jpg.
Execution loop =  630 for file:  training_images/real_00602.jpg
Detected 0 faces in real_00602.jpg.
Execution loop =  631 for file:  training_images/real_00945.jpg
Detected 1 faces in real_00945.jpg.
Execution loop =  632 for file:  training_images/real_00951.jpg
Detected 0 faces in real_00951.jpg.
Execution loop =  633 for file:  training_images/real_00789.jpg
Detected 1 faces in real_00789.jpg.
Execution loop =  634 for file:  training_images/real_00979.jpg
Detected 1 faces in real_00979.jpg.
Execution loop =  635 for file:  training_images/real_00986.jpg
Detected 2 faces in real_00986.jpg.
Execution loop =  636 for file:  training_images/real_00038.jpg
Detected 1 faces in real_00038.jpg.
Execution loop =  637 for file:  training_images/real_00992.jpg
Detected 1 faces in real_00992.jpg.
Execution loop =  638 for file:  training_images/real_00762.jpg
Detected 0 faces in real_00762.jpg.
Execution loop =  639 for file:  training_images/real_00004.jpg
Detected 1 faces in real_00004.jpg.
Execution loop =  640 for file:  training_images/real_00010.jpg
Detected 1 faces in real_00010.jpg.
Execution loop =  641 for file:  training_images/real_00776.jpg
Detected 1 faces in real_00776.jpg.
Execution loop =  642 for file:  training_images/real_00480(1).jpg
Detected 1 faces in real_00480(1).jpg.
Execution loop =  643 for file:  training_images/real_00548.jpg
Detected 1 faces in real_00548.jpg.
Execution loop =  644 for file:  training_images/real_00206.jpg
Detected 1 faces in real_00206.jpg.
Execution loop =  645 for file:  training_images/real_00560.jpg
Detected 0 faces in real_00560.jpg.
Execution loop =  646 for file:  training_images/real_00574.jpg
Detected 1 faces in real_00574.jpg.
Execution loop =  647 for file:  training_images/real_00212.jpg
Detected 1 faces in real_00212.jpg.
Execution loop =  648 for file:  training_images/real_00562.jpg
Detected 1 faces in real_00562.jpg.
Execution loop =  649 for file:  training_images/real_00204.jpg
Detected 1 faces in real_00204.jpg.
Execution loop =  650 for file:  training_images/real_00210.jpg
Detected 1 faces in real_00210.jpg.
Execution loop =  651 for file:  training_images/real_00576.jpg
Detected 1 faces in real_00576.jpg.
Execution loop =  652 for file:  training_images/real_00238.jpg
Detected 1 faces in real_00238.jpg.
Execution loop =  653 for file:  training_images/real_00589.jpg
Detected 1 faces in real_00589.jpg.
Execution loop =  654 for file:  training_images/real_00006.jpg
Detected 1 faces in real_00006.jpg.
Execution loop =  655 for file:  training_images/real_00760.jpg
Detected 1 faces in real_00760.jpg.
Execution loop =  656 for file:  training_images/real_00774.jpg
Detected 1 faces in real_00774.jpg.
Execution loop =  657 for file:  training_images/real_00012.jpg
Detected 1 faces in real_00012.jpg.
Execution loop =  658 for file:  training_images/real_00984.jpg
Detected 0 faces in real_00984.jpg.
Execution loop =  659 for file:  training_images/real_00990.jpg
Detected 0 faces in real_00990.jpg.
Execution loop =  660 for file:  training_images/real_00748.jpg
Detected 1 faces in real_00748.jpg.
Execution loop =  661 for file:  training_images/real_00947.jpg
Detected 1 faces in real_00947.jpg.
Execution loop =  662 for file:  training_images/real_00318(1).jpg
Detected 0 faces in real_00318(1).jpg.
Execution loop =  663 for file:  training_images/real_00953.jpg
Detected 0 faces in real_00953.jpg.
Execution loop =  664 for file:  training_images/real_00172.jpg
Detected 1 faces in real_00172.jpg.
Execution loop =  665 for file:  training_images/real_00614.jpg
Detected 0 faces in real_00614.jpg.
Execution loop =  666 for file:  training_images/real_00600.jpg
Detected 1 faces in real_00600.jpg.
Execution loop =  667 for file:  training_images/real_00166.jpg
Detected 1 faces in real_00166.jpg.
Execution loop =  668 for file:  training_images/real_00628.jpg
Detected 0 faces in real_00628.jpg.
Execution loop =  669 for file:  training_images/real_00833.jpg
Detected 1 faces in real_00833.jpg.
Execution loop =  670 for file:  training_images/real_00827.jpg
Detected 2 faces in real_00827.jpg.
Execution loop =  671 for file:  training_images/real_00199.jpg
Detected 0 faces in real_00199.jpg.
Execution loop =  672 for file:  training_images/real_00416.jpg
Detected 1 faces in real_00416.jpg.
Execution loop =  673 for file:  training_images/real_00370.jpg
Detected 1 faces in real_00370.jpg.
Execution loop =  674 for file:  training_images/real_00364.jpg
Detected 0 faces in real_00364.jpg.
Execution loop =  675 for file:  training_images/real_00402.jpg
Detected 0 faces in real_00402.jpg.
Execution loop =  676 for file:  training_images/real_01052.jpg
Detected 0 faces in real_01052.jpg.
Execution loop =  677 for file:  training_images/real_00358.jpg
Detected 2 faces in real_00358.jpg.
Execution loop =  678 for file:  training_images/real_01046.jpg
Detected 1 faces in real_01046.jpg.
Execution loop =  679 for file:  training_images/real_01047.jpg
Detected 0 faces in real_01047.jpg.
Execution loop =  680 for file:  training_images/real_00359.jpg
Detected 1 faces in real_00359.jpg.
Execution loop =  681 for file:  training_images/real_01053.jpg
Detected 1 faces in real_01053.jpg.
Execution loop =  682 for file:  training_images/real_00365.jpg
Detected 1 faces in real_00365.jpg.
Execution loop =  683 for file:  training_images/real_00403.jpg
Detected 1 faces in real_00403.jpg.
Execution loop =  684 for file:  training_images/real_00417.jpg
Detected 1 faces in real_00417.jpg.
Execution loop =  685 for file:  training_images/real_00371.jpg
Detected 1 faces in real_00371.jpg.
Execution loop =  686 for file:  training_images/real_00826.jpg
Detected 1 faces in real_00826.jpg.
Execution loop =  687 for file:  training_images/real_00198.jpg
Detected 0 faces in real_00198.jpg.
Execution loop =  688 for file:  training_images/real_00832.jpg
Detected 1 faces in real_00832.jpg.
Execution loop =  689 for file:  training_images/real_00629.jpg
Detected 2 faces in real_00629.jpg.
Execution loop =  690 for file:  training_images/real_00601.jpg
Detected 1 faces in real_00601.jpg.
Execution loop =  691 for file:  training_images/real_00167.jpg
Detected 1 faces in real_00167.jpg.
Execution loop =  692 for file:  training_images/real_00173.jpg
Detected 1 faces in real_00173.jpg.
Execution loop =  693 for file:  training_images/real_00615.jpg
Detected 1 faces in real_00615.jpg.
Execution loop =  694 for file:  training_images/real_00952.jpg
Detected 0 faces in real_00952.jpg.
Execution loop =  695 for file:  training_images/real_00946.jpg
Detected 0 faces in real_00946.jpg.
Execution loop =  696 for file:  training_images/real_00749.jpg
Detected 1 faces in real_00749.jpg.
Execution loop =  697 for file:  training_images/real_00991.jpg
Detected 1 faces in real_00991.jpg.
Execution loop =  698 for file:  training_images/real_00985.jpg
Detected 1 faces in real_00985.jpg.
Execution loop =  699 for file:  training_images/real_00775.jpg
Detected 0 faces in real_00775.jpg.
Execution loop =  700 for file:  training_images/real_00013.jpg
Detected 0 faces in real_00013.jpg.
Execution loop =  701 for file:  training_images/real_00007.jpg
Detected 0 faces in real_00007.jpg.
Execution loop =  702 for file:  training_images/real_00761.jpg
Detected 1 faces in real_00761.jpg.
Execution loop =  703 for file:  training_images/real_00588.jpg
Detected 1 faces in real_00588.jpg.
Execution loop =  704 for file:  training_images/real_00239.jpg
Detected 1 faces in real_00239.jpg.
Execution loop =  705 for file:  training_images/real_00211.jpg
Detected 1 faces in real_00211.jpg.
Execution loop =  706 for file:  training_images/real_00577.jpg
Detected 1 faces in real_00577.jpg.
Execution loop =  707 for file:  training_images/real_00563.jpg
Detected 1 faces in real_00563.jpg.
Execution loop =  708 for file:  training_images/real_00205.jpg
Detected 1 faces in real_00205.jpg.
Execution loop =  709 for file:  training_images/real_00229.jpg
Detected 1 faces in real_00229.jpg.
Execution loop =  710 for file:  training_images/real_01013(1).jpg
Detected 1 faces in real_01013(1).jpg.
Execution loop =  711 for file:  training_images/real_00201.jpg
Detected 1 faces in real_00201.jpg.
Execution loop =  712 for file:  training_images/real_00567.jpg
Detected 1 faces in real_00567.jpg.
Execution loop =  713 for file:  training_images/real_00573.jpg
Detected 1 faces in real_00573.jpg.
Execution loop =  714 for file:  training_images/real_00215.jpg
Detected 0 faces in real_00215.jpg.
Execution loop =  715 for file:  training_images/real_00598.jpg
Detected 0 faces in real_00598.jpg.
Execution loop =  716 for file:  training_images/real_00981.jpg
Detected 1 faces in real_00981.jpg.
Execution loop =  717 for file:  training_images/real_00759.jpg
Detected 1 faces in real_00759.jpg.
Execution loop =  718 for file:  training_images/real_00995.jpg
Detected 1 faces in real_00995.jpg.
Execution loop =  719 for file:  training_images/real_00765.jpg
Detected 1 faces in real_00765.jpg.
Execution loop =  720 for file:  training_images/real_00003.jpg
Detected 1 faces in real_00003.jpg.
Execution loop =  721 for file:  training_images/real_00017.jpg
Detected 1 faces in real_00017.jpg.
Execution loop =  722 for file:  training_images/real_00771.jpg
Detected 1 faces in real_00771.jpg.
Execution loop =  723 for file:  training_images/real_00942.jpg
Detected 0 faces in real_00942.jpg.
Execution loop =  724 for file:  training_images/real_00956.jpg
Detected 1 faces in real_00956.jpg.
Execution loop =  725 for file:  training_images/real_00639.jpg
Detected 1 faces in real_00639.jpg.
Execution loop =  726 for file:  training_images/real_00611.jpg
Detected 0 faces in real_00611.jpg.
Execution loop =  727 for file:  training_images/real_00177.jpg
Detected 2 faces in real_00177.jpg.
Execution loop =  728 for file:  training_images/real_00163.jpg
Detected 1 faces in real_00163.jpg.
Execution loop =  729 for file:  training_images/real_00605.jpg
Detected 1 faces in real_00605.jpg.
Execution loop =  730 for file:  training_images/real_00836.jpg
Detected 1 faces in real_00836.jpg.
Execution loop =  731 for file:  training_images/real_00188.jpg
Detected 1 faces in real_00188.jpg.
Execution loop =  732 for file:  training_images/real_00822.jpg
Detected 1 faces in real_00822.jpg.
Execution loop =  733 for file:  training_images/real_00349.jpg
Detected 1 faces in real_00349.jpg.
Execution loop =  734 for file:  training_images/real_01057.jpg
Detected 1 faces in real_01057.jpg.
Execution loop =  735 for file:  training_images/real_01043.jpg
Detected 1 faces in real_01043.jpg.
Execution loop =  736 for file:  training_images/real_00375.jpg
Detected 0 faces in real_00375.jpg.
Execution loop =  737 for file:  training_images/real_00413.jpg
Detected 1 faces in real_00413.jpg.
Execution loop =  738 for file:  training_images/real_00407.jpg
Detected 1 faces in real_00407.jpg.
Execution loop =  739 for file:  training_images/real_00361.jpg
Detected 1 faces in real_00361.jpg.
Execution loop =  740 for file:  training_images/real_01080.jpg
Detected 1 faces in real_01080.jpg.
Execution loop =  741 for file:  training_images/real_01081.jpg
Detected 0 faces in real_01081.jpg.
Execution loop =  742 for file:  training_images/real_00406.jpg
Detected 1 faces in real_00406.jpg.
Execution loop =  743 for file:  training_images/real_00360.jpg
Detected 1 faces in real_00360.jpg.
Execution loop =  744 for file:  training_images/real_00374.jpg
Detected 0 faces in real_00374.jpg.
Execution loop =  745 for file:  training_images/real_00412.jpg
Detected 1 faces in real_00412.jpg.
Execution loop =  746 for file:  training_images/real_01042.jpg
Detected 1 faces in real_01042.jpg.
Execution loop =  747 for file:  training_images/real_01056.jpg
Detected 1 faces in real_01056.jpg.
Execution loop =  748 for file:  training_images/real_00348.jpg
Detected 1 faces in real_00348.jpg.
Execution loop =  749 for file:  training_images/real_00823.jpg
Detected 1 faces in real_00823.jpg.
Execution loop =  750 for file:  training_images/real_00837.jpg
Detected 2 faces in real_00837.jpg.
Execution loop =  751 for file:  training_images/real_00189.jpg
Detected 1 faces in real_00189.jpg.
Execution loop =  752 for file:  training_images/real_00162.jpg
Detected 0 faces in real_00162.jpg.
Execution loop =  753 for file:  training_images/real_00604.jpg
Detected 1 faces in real_00604.jpg.
Execution loop =  754 for file:  training_images/real_00610.jpg
Detected 1 faces in real_00610.jpg.
Execution loop =  755 for file:  training_images/real_00176.jpg
Detected 1 faces in real_00176.jpg.
Execution loop =  756 for file:  training_images/real_00638.jpg
Detected 0 faces in real_00638.jpg.
Execution loop =  757 for file:  training_images/real_00957.jpg
Detected 0 faces in real_00957.jpg.
Execution loop =  758 for file:  training_images/real_00943.jpg
Detected 1 faces in real_00943.jpg.
Execution loop =  759 for file:  training_images/real_00016.jpg
Detected 0 faces in real_00016.jpg.
Execution loop =  760 for file:  training_images/real_00770.jpg
Detected 1 faces in real_00770.jpg.
Execution loop =  761 for file:  training_images/real_00764.jpg
Detected 1 faces in real_00764.jpg.
Execution loop =  762 for file:  training_images/real_00002.jpg
Detected 1 faces in real_00002.jpg.
Execution loop =  763 for file:  training_images/real_00994.jpg
Detected 1 faces in real_00994.jpg.
Execution loop =  764 for file:  training_images/real_00758.jpg
Detected 1 faces in real_00758.jpg.
Execution loop =  765 for file:  training_images/real_00980.jpg
Detected 1 faces in real_00980.jpg.
Execution loop =  766 for file:  training_images/real_00599.jpg
Detected 1 faces in real_00599.jpg.
Execution loop =  767 for file:  training_images/real_00572.jpg
Detected 1 faces in real_00572.jpg.
Execution loop =  768 for file:  training_images/real_00214.jpg
Detected 1 faces in real_00214.jpg.
Execution loop =  769 for file:  training_images/real_00200.jpg
Detected 1 faces in real_00200.jpg.
Execution loop =  770 for file:  training_images/real_00566.jpg
Detected 1 faces in real_00566.jpg.
Execution loop =  771 for file:  training_images/real_00228.jpg
Detected 0 faces in real_00228.jpg.
Execution loop =  772 for file:  training_images/real_00558.jpg
Detected 1 faces in real_00558.jpg.
Execution loop =  773 for file:  training_images/real_00216.jpg
Detected 1 faces in real_00216.jpg.
Execution loop =  774 for file:  training_images/real_00570.jpg
Detected 1 faces in real_00570.jpg.
Execution loop =  775 for file:  training_images/real_00564.jpg
Detected 1 faces in real_00564.jpg.
Execution loop =  776 for file:  training_images/real_00202.jpg
Detected 0 faces in real_00202.jpg.
Execution loop =  777 for file:  training_images/real_00996.jpg
Detected 1 faces in real_00996.jpg.
Execution loop =  778 for file:  training_images/real_00028.jpg
Detected 1 faces in real_00028.jpg.
Execution loop =  779 for file:  training_images/real_00982.jpg
Detected 1 faces in real_00982.jpg.
Execution loop =  780 for file:  training_images/real_00772.jpg
Detected 0 faces in real_00772.jpg.
Execution loop =  781 for file:  training_images/real_00014.jpg
Detected 1 faces in real_00014.jpg.
Execution loop =  782 for file:  training_images/real_00766.jpg
Detected 1 faces in real_00766.jpg.
Execution loop =  783 for file:  training_images/real_00955.jpg
Detected 1 faces in real_00955.jpg.
Execution loop =  784 for file:  training_images/real_00799.jpg
Detected 1 faces in real_00799.jpg.
Execution loop =  785 for file:  training_images/real_00941.jpg
Detected 1 faces in real_00941.jpg.
Execution loop =  786 for file:  training_images/real_00969.jpg
Detected 0 faces in real_00969.jpg.
Execution loop =  787 for file:  training_images/real_00148.jpg
Detected 0 faces in real_00148.jpg.
Execution loop =  788 for file:  training_images/real_00606.jpg
Detected 2 faces in real_00606.jpg.
Execution loop =  789 for file:  training_images/real_00160.jpg
Detected 1 faces in real_00160.jpg.
Execution loop =  790 for file:  training_images/real_00174.jpg
Detected 1 faces in real_00174.jpg.
Execution loop =  791 for file:  training_images/real_00612.jpg
Detected 1 faces in real_00612.jpg.
Execution loop =  792 for file:  training_images/real_00821.jpg
Detected 1 faces in real_00821.jpg.
Execution loop =  793 for file:  training_images/real_00835.jpg
Detected 1 faces in real_00835.jpg.
Execution loop =  794 for file:  training_images/real_00809.jpg
Detected 1 faces in real_00809.jpg.
Execution loop =  795 for file:  training_images/real_01040.jpg
Detected 1 faces in real_01040.jpg.
Execution loop =  796 for file:  training_images/real_00438.jpg
Detected 1 faces in real_00438.jpg.
Execution loop =  797 for file:  training_images/real_01054.jpg
Detected 0 faces in real_01054.jpg.
Execution loop =  798 for file:  training_images/real_00362.jpg
Detected 1 faces in real_00362.jpg.
Execution loop =  799 for file:  training_images/real_00404.jpg
Detected 1 faces in real_00404.jpg.
Execution loop =  800 for file:  training_images/real_00410.jpg
Detected 1 faces in real_00410.jpg.
Execution loop =  801 for file:  training_images/real_00376.jpg
Detected 1 faces in real_00376.jpg.
Execution loop =  802 for file:  training_images/real_01068.jpg
Detected 1 faces in real_01068.jpg.
Execution loop =  803 for file:  training_images/real_00389.jpg
Detected 0 faces in real_00389.jpg.
Execution loop =  804 for file:  training_images/real_00388.jpg
Detected 1 faces in real_00388.jpg.
Execution loop =  805 for file:  training_images/real_00411.jpg
Detected 1 faces in real_00411.jpg.
Execution loop =  806 for file:  training_images/real_01069.jpg
Detected 1 faces in real_01069.jpg.
Execution loop =  807 for file:  training_images/real_00377.jpg
Detected 1 faces in real_00377.jpg.
Execution loop =  808 for file:  training_images/real_00363.jpg
Detected 1 faces in real_00363.jpg.
Execution loop =  809 for file:  training_images/real_00405.jpg
Detected 2 faces in real_00405.jpg.
Execution loop =  810 for file:  training_images/real_01055.jpg
Detected 1 faces in real_01055.jpg.
Execution loop =  811 for file:  training_images/real_01041.jpg
Detected 1 faces in real_01041.jpg.
Execution loop =  812 for file:  training_images/real_00439.jpg
Detected 1 faces in real_00439.jpg.
Execution loop =  813 for file:  training_images/real_00808.jpg
Detected 1 faces in real_00808.jpg.
Execution loop =  814 for file:  training_images/real_00834.jpg
Detected 1 faces in real_00834.jpg.
Execution loop =  815 for file:  training_images/real_00820.jpg
Detected 1 faces in real_00820.jpg.
Execution loop =  816 for file:  training_images/real_00175.jpg
Detected 1 faces in real_00175.jpg.
Execution loop =  817 for file:  training_images/real_00613.jpg
Detected 0 faces in real_00613.jpg.
Execution loop =  818 for file:  training_images/real_00607.jpg
Detected 0 faces in real_00607.jpg.
Execution loop =  819 for file:  training_images/real_00161.jpg
Detected 1 faces in real_00161.jpg.
Execution loop =  820 for file:  training_images/real_00149.jpg
Detected 1 faces in real_00149.jpg.
Execution loop =  821 for file:  training_images/real_00968.jpg
Detected 1 faces in real_00968.jpg.
Execution loop =  822 for file:  training_images/real_00940.jpg
Detected 1 faces in real_00940.jpg.
Execution loop =  823 for file:  training_images/real_00798.jpg
Detected 0 faces in real_00798.jpg.
Execution loop =  824 for file:  training_images/real_00954.jpg
Detected 1 faces in real_00954.jpg.
Execution loop =  825 for file:  training_images/real_00001.jpg
Detected 1 faces in real_00001.jpg.
Execution loop =  826 for file:  training_images/real_00767.jpg
Detected 1 faces in real_00767.jpg.
Execution loop =  827 for file:  training_images/real_00773.jpg
Detected 1 faces in real_00773.jpg.
Execution loop =  828 for file:  training_images/real_00015.jpg
Detected 1 faces in real_00015.jpg.
Execution loop =  829 for file:  training_images/real_00983.jpg
Detected 1 faces in real_00983.jpg.
Execution loop =  830 for file:  training_images/real_00997.jpg
Detected 1 faces in real_00997.jpg.
Execution loop =  831 for file:  training_images/real_00029.jpg
Detected 0 faces in real_00029.jpg.
Execution loop =  832 for file:  training_images/real_00565.jpg
Detected 1 faces in real_00565.jpg.
Execution loop =  833 for file:  training_images/real_00203.jpg
Detected 1 faces in real_00203.jpg.
Execution loop =  834 for file:  training_images/real_00217.jpg
Detected 0 faces in real_00217.jpg.
Execution loop =  835 for file:  training_images/real_00571.jpg
Detected 1 faces in real_00571.jpg.
Execution loop =  836 for file:  training_images/real_00559.jpg
Detected 1 faces in real_00559.jpg.
Execution loop =  837 for file:  training_images/real_00270.jpg
Detected 1 faces in real_00270.jpg.
Execution loop =  838 for file:  training_images/real_00516.jpg
Detected 1 faces in real_00516.jpg.
Execution loop =  839 for file:  training_images/real_00502.jpg
Detected 1 faces in real_00502.jpg.
Execution loop =  840 for file:  training_images/real_00264.jpg
Detected 1 faces in real_00264.jpg.
Execution loop =  841 for file:  training_images/real_00258.jpg
Detected 1 faces in real_00258.jpg.
Execution loop =  842 for file:  training_images/real_00714.jpg
Detected 1 faces in real_00714.jpg.
Execution loop =  843 for file:  training_images/real_00072.jpg
Detected 0 faces in real_00072.jpg.
Execution loop =  844 for file:  training_images/real_00066.jpg
Detected 0 faces in real_00066.jpg.
Execution loop =  845 for file:  training_images/real_00700.jpg
Detected 0 faces in real_00700.jpg.
Execution loop =  846 for file:  training_images/real_00728.jpg
Detected 1 faces in real_00728.jpg.
Execution loop =  847 for file:  training_images/real_00933.jpg
Detected 1 faces in real_00933.jpg.
Execution loop =  848 for file:  training_images/real_00099.jpg
Detected 0 faces in real_00099.jpg.
Execution loop =  849 for file:  training_images/real_00927.jpg
Detected 1 faces in real_00927.jpg.
Execution loop =  850 for file:  training_images/real_00660.jpg
Detected 1 faces in real_00660.jpg.
Execution loop =  851 for file:  training_images/real_00106.jpg
Detected 1 faces in real_00106.jpg.
Execution loop =  852 for file:  training_images/real_00112.jpg
Detected 1 faces in real_00112.jpg.
Execution loop =  853 for file:  training_images/real_00674.jpg
Detected 1 faces in real_00674.jpg.
Execution loop =  854 for file:  training_images/real_00884.jpg
Detected 0 faces in real_00884.jpg.
Execution loop =  855 for file:  training_images/real_00648.jpg
Detected 1 faces in real_00648.jpg.
Execution loop =  856 for file:  training_images/real_00890.jpg
Detected 0 faces in real_00890.jpg.
Execution loop =  857 for file:  training_images/real_00847.jpg
Detected 1 faces in real_00847.jpg.
Execution loop =  858 for file:  training_images/real_00853.jpg
Detected 0 faces in real_00853.jpg.
Execution loop =  859 for file:  training_images/real_00304.jpg
Detected 2 faces in real_00304.jpg.
Execution loop =  860 for file:  training_images/real_00462.jpg
Detected 1 faces in real_00462.jpg.
Execution loop =  861 for file:  training_images/real_00476.jpg
Detected 1 faces in real_00476.jpg.
Execution loop =  862 for file:  training_images/real_00310.jpg
Detected 1 faces in real_00310.jpg.
Execution loop =  863 for file:  training_images/real_00338.jpg
Detected 0 faces in real_00338.jpg.
Execution loop =  864 for file:  training_images/real_01026.jpg
Detected 1 faces in real_01026.jpg.
Execution loop =  865 for file:  training_images/real_01032.jpg
Detected 1 faces in real_01032.jpg.
Execution loop =  866 for file:  training_images/real_00489.jpg
Detected 1 faces in real_00489.jpg.
Execution loop =  867 for file:  training_images/real_00488.jpg
Detected 0 faces in real_00488.jpg.
Execution loop =  868 for file:  training_images/real_01033.jpg
Detected 1 faces in real_01033.jpg.
Execution loop =  869 for file:  training_images/real_01027.jpg
Detected 1 faces in real_01027.jpg.
Execution loop =  870 for file:  training_images/real_00339.jpg
Detected 0 faces in real_00339.jpg.
Execution loop =  871 for file:  training_images/real_00477.jpg
Detected 1 faces in real_00477.jpg.
Execution loop =  872 for file:  training_images/real_00311.jpg
Detected 1 faces in real_00311.jpg.
Execution loop =  873 for file:  training_images/real_00305.jpg
Detected 2 faces in real_00305.jpg.
Execution loop =  874 for file:  training_images/real_00463.jpg
Detected 0 faces in real_00463.jpg.
Execution loop =  875 for file:  training_images/real_00852.jpg
Detected 0 faces in real_00852.jpg.
Execution loop =  876 for file:  training_images/real_00846.jpg
Detected 1 faces in real_00846.jpg.
Execution loop =  877 for file:  training_images/real_00891.jpg
Detected 1 faces in real_00891.jpg.
Execution loop =  878 for file:  training_images/real_00649.jpg
Detected 1 faces in real_00649.jpg.
Execution loop =  879 for file:  training_images/real_00885.jpg
Detected 1 faces in real_00885.jpg.
Execution loop =  880 for file:  training_images/real_00113.jpg
Detected 1 faces in real_00113.jpg.
Execution loop =  881 for file:  training_images/real_00675.jpg
Detected 1 faces in real_00675.jpg.
Execution loop =  882 for file:  training_images/real_00661.jpg
Detected 0 faces in real_00661.jpg.
Execution loop =  883 for file:  training_images/real_00107.jpg
Detected 1 faces in real_00107.jpg.
Execution loop =  884 for file:  training_images/real_00098.jpg
Detected 0 faces in real_00098.jpg.
Execution loop =  885 for file:  training_images/real_00926.jpg
Detected 1 faces in real_00926.jpg.
Execution loop =  886 for file:  training_images/real_00932.jpg
Detected 1 faces in real_00932.jpg.
Execution loop =  887 for file:  training_images/real_00729.jpg
Detected 0 faces in real_00729.jpg.
Execution loop =  888 for file:  training_images/real_00067.jpg
Detected 1 faces in real_00067.jpg.
Execution loop =  889 for file:  training_images/real_00701.jpg
Detected 1 faces in real_00701.jpg.
Execution loop =  890 for file:  training_images/real_00715.jpg
Detected 1 faces in real_00715.jpg.
Execution loop =  891 for file:  training_images/real_00073.jpg
Detected 1 faces in real_00073.jpg.
Execution loop =  892 for file:  training_images/real_00259.jpg
Detected 0 faces in real_00259.jpg.
Execution loop =  893 for file:  training_images/real_00503.jpg
Detected 1 faces in real_00503.jpg.
Execution loop =  894 for file:  training_images/real_00265.jpg
Detected 1 faces in real_00265.jpg.
Execution loop =  895 for file:  training_images/real_00271.jpg
Detected 1 faces in real_00271.jpg.
Execution loop =  896 for file:  training_images/real_00517.jpg
Detected 1 faces in real_00517.jpg.
Execution loop =  897 for file:  training_images/real_00267.jpg
Detected 1 faces in real_00267.jpg.
Execution loop =  898 for file:  training_images/real_00501.jpg
Detected 1 faces in real_00501.jpg.
Execution loop =  899 for file:  training_images/real_00515.jpg
Detected 1 faces in real_00515.jpg.
Execution loop =  900 for file:  training_images/real_00273.jpg
Detected 1 faces in real_00273.jpg.
Execution loop =  901 for file:  training_images/real_00529.jpg
Detected 0 faces in real_00529.jpg.
Execution loop =  902 for file:  training_images/real_00298.jpg
Detected 1 faces in real_00298.jpg.
Execution loop =  903 for file:  training_images/real_00494(1).jpg
Detected 1 faces in real_00494(1).jpg.
Execution loop =  904 for file:  training_images/real_00703.jpg
Detected 1 faces in real_00703.jpg.
Execution loop =  905 for file:  training_images/real_00065.jpg
Detected 1 faces in real_00065.jpg.
Execution loop =  906 for file:  training_images/real_00071.jpg
Detected 1 faces in real_00071.jpg.
Execution loop =  907 for file:  training_images/real_00717.jpg
Detected 1 faces in real_00717.jpg.
Execution loop =  908 for file:  training_images/real_00059.jpg
Detected 1 faces in real_00059.jpg.
Execution loop =  909 for file:  training_images/real_00918.jpg
Detected 1 faces in real_00918.jpg.
Execution loop =  910 for file:  training_images/real_00924.jpg
Detected 1 faces in real_00924.jpg.
Execution loop =  911 for file:  training_images/real_00930.jpg
Detected 1 faces in real_00930.jpg.
Execution loop =  912 for file:  training_images/real_00677.jpg
Detected 1 faces in real_00677.jpg.
Execution loop =  913 for file:  training_images/real_00111.jpg
Detected 1 faces in real_00111.jpg.
Execution loop =  914 for file:  training_images/real_00105.jpg
Detected 0 faces in real_00105.jpg.
Execution loop =  915 for file:  training_images/real_00663.jpg
Detected 1 faces in real_00663.jpg.
Execution loop =  916 for file:  training_images/real_00893.jpg
Detected 1 faces in real_00893.jpg.
Execution loop =  917 for file:  training_images/real_00139.jpg
Detected 1 faces in real_00139.jpg.
Execution loop =  918 for file:  training_images/real_00887.jpg
Detected 1 faces in real_00887.jpg.
Execution loop =  919 for file:  training_images/real_00878.jpg
Detected 1 faces in real_00878.jpg.
Execution loop =  920 for file:  training_images/real_00850.jpg
Detected 1 faces in real_00850.jpg.
Execution loop =  921 for file:  training_images/real_00688.jpg
Detected 1 faces in real_00688.jpg.
Execution loop =  922 for file:  training_images/real_00844.jpg
Detected 1 faces in real_00844.jpg.
Execution loop =  923 for file:  training_images/real_00313.jpg
Detected 1 faces in real_00313.jpg.
Execution loop =  924 for file:  training_images/real_00475.jpg
Detected 1 faces in real_00475.jpg.
Execution loop =  925 for file:  training_images/real_00461.jpg
Detected 1 faces in real_00461.jpg.
Execution loop =  926 for file:  training_images/real_00307.jpg
Detected 1 faces in real_00307.jpg.
Execution loop =  927 for file:  training_images/real_01019.jpg
Detected 1 faces in real_01019.jpg.
Execution loop =  928 for file:  training_images/real_01031.jpg
Detected 1 faces in real_01031.jpg.
Execution loop =  929 for file:  training_images/real_00449.jpg
Detected 1 faces in real_00449.jpg.
Execution loop =  930 for file:  training_images/real_01025.jpg
Detected 0 faces in real_01025.jpg.
Execution loop =  931 for file:  training_images/real_01024.jpg
Detected 1 faces in real_01024.jpg.
Execution loop =  932 for file:  training_images/real_01030.jpg
Detected 1 faces in real_01030.jpg.
Execution loop =  933 for file:  training_images/real_00448.jpg
Detected 1 faces in real_00448.jpg.
Execution loop =  934 for file:  training_images/real_00460.jpg
Detected 1 faces in real_00460.jpg.
Execution loop =  935 for file:  training_images/real_01018.jpg
Detected 1 faces in real_01018.jpg.
Execution loop =  936 for file:  training_images/real_00306.jpg
Detected 1 faces in real_00306.jpg.
Execution loop =  937 for file:  training_images/real_00312.jpg
Detected 1 faces in real_00312.jpg.
Execution loop =  938 for file:  training_images/real_00474.jpg
Detected 1 faces in real_00474.jpg.
Execution loop =  939 for file:  training_images/real_00845.jpg
Detected 1 faces in real_00845.jpg.
Execution loop =  940 for file:  training_images/real_00689.jpg
Detected 1 faces in real_00689.jpg.
Execution loop =  941 for file:  training_images/real_00851.jpg
Detected 0 faces in real_00851.jpg.
Execution loop =  942 for file:  training_images/real_00879.jpg
Detected 1 faces in real_00879.jpg.
Execution loop =  943 for file:  training_images/real_00138.jpg
Detected 1 faces in real_00138.jpg.
Execution loop =  944 for file:  training_images/real_00886.jpg
Detected 1 faces in real_00886.jpg.
Execution loop =  945 for file:  training_images/real_00892.jpg
Detected 1 faces in real_00892.jpg.
Execution loop =  946 for file:  training_images/real_00104.jpg
Detected 2 faces in real_00104.jpg.
Execution loop =  947 for file:  training_images/real_00662.jpg
Detected 1 faces in real_00662.jpg.
Execution loop =  948 for file:  training_images/real_00676.jpg
Detected 1 faces in real_00676.jpg.
Execution loop =  949 for file:  training_images/real_00110.jpg
Detected 1 faces in real_00110.jpg.
Execution loop =  950 for file:  training_images/real_00931.jpg
Detected 1 faces in real_00931.jpg.
Execution loop =  951 for file:  training_images/real_00925.jpg
Detected 1 faces in real_00925.jpg.
Execution loop =  952 for file:  training_images/real_00919.jpg
Detected 1 faces in real_00919.jpg.
Execution loop =  953 for file:  training_images/real_00058.jpg
Detected 1 faces in real_00058.jpg.
Execution loop =  954 for file:  training_images/real_00070.jpg
Detected 0 faces in real_00070.jpg.
Execution loop =  955 for file:  training_images/real_00716.jpg
Detected 1 faces in real_00716.jpg.
Execution loop =  956 for file:  training_images/real_00702.jpg
Detected 1 faces in real_00702.jpg.
Execution loop =  957 for file:  training_images/real_00064.jpg
Detected 0 faces in real_00064.jpg.
Execution loop =  958 for file:  training_images/real_00299.jpg
Detected 1 faces in real_00299.jpg.
Execution loop =  959 for file:  training_images/real_00528.jpg
Detected 1 faces in real_00528.jpg.
Execution loop =  960 for file:  training_images/real_00514.jpg
Detected 0 faces in real_00514.jpg.
Execution loop =  961 for file:  training_images/real_00272.jpg
Detected 1 faces in real_00272.jpg.
Execution loop =  962 for file:  training_images/real_00266.jpg
Detected 1 faces in real_00266.jpg.
Execution loop =  963 for file:  training_images/real_00500.jpg
Detected 1 faces in real_00500.jpg.
Execution loop =  964 for file:  training_images/real_00538.jpg
Detected 0 faces in real_00538.jpg.
Execution loop =  965 for file:  training_images/real_00504.jpg
Detected 1 faces in real_00504.jpg.
Execution loop =  966 for file:  training_images/real_00262.jpg
Detected 2 faces in real_00262.jpg.
Execution loop =  967 for file:  training_images/real_00276.jpg
Detected 1 faces in real_00276.jpg.
Execution loop =  968 for file:  training_images/real_00510.jpg
Detected 0 faces in real_00510.jpg.
Execution loop =  969 for file:  training_images/real_00289.jpg
Detected 1 faces in real_00289.jpg.
Execution loop =  970 for file:  training_images/real_00048.jpg
Detected 1 faces in real_00048.jpg.
Execution loop =  971 for file:  training_images/real_00060.jpg
Detected 1 faces in real_00060.jpg.
Execution loop =  972 for file:  training_images/real_00706.jpg
Detected 1 faces in real_00706.jpg.
Execution loop =  973 for file:  training_images/real_00712.jpg
Detected 1 faces in real_00712.jpg.
Execution loop =  974 for file:  training_images/real_00074.jpg
Detected 1 faces in real_00074.jpg.
Execution loop =  975 for file:  training_images/real_00921.jpg
Detected 0 faces in real_00921.jpg.
Execution loop =  976 for file:  training_images/real_00935.jpg
Detected 0 faces in real_00935.jpg.
Execution loop =  977 for file:  training_images/real_00909.jpg
Detected 1 faces in real_00909.jpg.
Execution loop =  978 for file:  training_images/real_00128.jpg
Detected 1 faces in real_00128.jpg.
Execution loop =  979 for file:  training_images/real_00896.jpg
Detected 1 faces in real_00896.jpg.
Execution loop =  980 for file:  training_images/real_00882.jpg
Detected 1 faces in real_00882.jpg.
Execution loop =  981 for file:  training_images/real_00114.jpg
Detected 1 faces in real_00114.jpg.
Execution loop =  982 for file:  training_images/real_00672.jpg
Detected 1 faces in real_00672.jpg.
Execution loop =  983 for file:  training_images/real_00666.jpg
Detected 1 faces in real_00666.jpg.
Execution loop =  984 for file:  training_images/real_00100.jpg
Detected 1 faces in real_00100.jpg.
Execution loop =  985 for file:  training_images/real_00855.jpg
Detected 1 faces in real_00855.jpg.
Execution loop =  986 for file:  training_images/real_00841.jpg
Detected 1 faces in real_00841.jpg.
Execution loop =  987 for file:  training_images/real_00699.jpg
Detected 1 faces in real_00699.jpg.
Execution loop =  988 for file:  training_images/real_00869.jpg
Detected 1 faces in real_00869.jpg.
Execution loop =  989 for file:  training_images/real_01034.jpg
Detected 0 faces in real_01034.jpg.
Execution loop =  990 for file:  training_images/real_01020.jpg
Detected 1 faces in real_01020.jpg.
Execution loop =  991 for file:  training_images/real_00458.jpg
Detected 1 faces in real_00458.jpg.
Execution loop =  992 for file:  training_images/real_00470.jpg
Detected 1 faces in real_00470.jpg.
Execution loop =  993 for file:  training_images/real_00316.jpg
Detected 0 faces in real_00316.jpg.
Execution loop =  994 for file:  training_images/real_01008.jpg
Detected 1 faces in real_01008.jpg.
Execution loop =  995 for file:  training_images/real_00302.jpg
Detected 1 faces in real_00302.jpg.
Execution loop =  996 for file:  training_images/real_00464.jpg
Detected 1 faces in real_00464.jpg.
Execution loop =  997 for file:  training_images/real_00303.jpg
Detected 1 faces in real_00303.jpg.
Execution loop =  998 for file:  training_images/real_00465.jpg
Detected 1 faces in real_00465.jpg.
Execution loop =  999 for file:  training_images/real_00471.jpg
Detected 0 faces in real_00471.jpg.
Execution loop =  1000 for file:  training_images/real_01009.jpg
Detected 1 faces in real_01009.jpg.
Execution loop =  1001 for file:  training_images/real_00317.jpg
Detected 1 faces in real_00317.jpg.
Execution loop =  1002 for file:  training_images/real_01021.jpg
Detected 1 faces in real_01021.jpg.
Execution loop =  1003 for file:  training_images/real_00459.jpg
Detected 1 faces in real_00459.jpg.
Execution loop =  1004 for file:  training_images/real_01035.jpg
Detected 0 faces in real_01035.jpg.
Execution loop =  1005 for file:  training_images/real_00868.jpg
Detected 1 faces in real_00868.jpg.
Execution loop =  1006 for file:  training_images/real_00698.jpg
Detected 1 faces in real_00698.jpg.
Execution loop =  1007 for file:  training_images/real_00840.jpg
Detected 1 faces in real_00840.jpg.
Execution loop =  1008 for file:  training_images/real_00854.jpg
Detected 1 faces in real_00854.jpg.
Execution loop =  1009 for file:  training_images/real_00667.jpg
Detected 1 faces in real_00667.jpg.
Execution loop =  1010 for file:  training_images/real_00101.jpg
Detected 1 faces in real_00101.jpg.
Execution loop =  1011 for file:  training_images/real_00115.jpg
Detected 1 faces in real_00115.jpg.
Execution loop =  1012 for file:  training_images/real_00673.jpg
Detected 1 faces in real_00673.jpg.
Execution loop =  1013 for file:  training_images/real_00883.jpg
Detected 0 faces in real_00883.jpg.
Execution loop =  1014 for file:  training_images/real_00129.jpg
Detected 1 faces in real_00129.jpg.
Execution loop =  1015 for file:  training_images/real_00897.jpg
Detected 0 faces in real_00897.jpg.
Execution loop =  1016 for file:  training_images/real_00908.jpg
Detected 1 faces in real_00908.jpg.
Execution loop =  1017 for file:  training_images/real_00934.jpg
Detected 1 faces in real_00934.jpg.
Execution loop =  1018 for file:  training_images/real_00920.jpg
Detected 1 faces in real_00920.jpg.
Execution loop =  1019 for file:  training_images/real_00713.jpg
Detected 1 faces in real_00713.jpg.
Execution loop =  1020 for file:  training_images/real_00075.jpg
Detected 1 faces in real_00075.jpg.
Execution loop =  1021 for file:  training_images/real_00061.jpg
Detected 1 faces in real_00061.jpg.
Execution loop =  1022 for file:  training_images/real_00707.jpg
Detected 1 faces in real_00707.jpg.
Execution loop =  1023 for file:  training_images/real_00049.jpg
Detected 1 faces in real_00049.jpg.
Execution loop =  1024 for file:  training_images/real_00288.jpg
Detected 0 faces in real_00288.jpg.
Execution loop =  1025 for file:  training_images/real_00277.jpg
Detected 1 faces in real_00277.jpg.
Execution loop =  1026 for file:  training_images/real_00511.jpg
Detected 0 faces in real_00511.jpg.
Execution loop =  1027 for file:  training_images/real_00505.jpg
Detected 1 faces in real_00505.jpg.
Execution loop =  1028 for file:  training_images/real_00263.jpg
Detected 1 faces in real_00263.jpg.
Execution loop =  1029 for file:  training_images/real_00539.jpg
Detected 1 faces in real_00539.jpg.
Execution loop =  1030 for file:  training_images/real_00249.jpg
Detected 1 faces in real_00249.jpg.
Execution loop =  1031 for file:  training_images/real_00513.jpg
Detected 2 faces in real_00513.jpg.
Execution loop =  1032 for file:  training_images/real_00275.jpg
Detected 0 faces in real_00275.jpg.
Execution loop =  1033 for file:  training_images/real_00261.jpg
Detected 1 faces in real_00261.jpg.
Execution loop =  1034 for file:  training_images/real_00507.jpg
Detected 1 faces in real_00507.jpg.
Execution loop =  1035 for file:  training_images/real_00739.jpg
Detected 1 faces in real_00739.jpg.
Execution loop =  1036 for file:  training_images/real_00077.jpg
Detected 0 faces in real_00077.jpg.
Execution loop =  1037 for file:  training_images/real_00711.jpg
Detected 0 faces in real_00711.jpg.
Execution loop =  1038 for file:  training_images/real_00705.jpg
Detected 0 faces in real_00705.jpg.
Execution loop =  1039 for file:  training_images/real_00063.jpg
Detected 1 faces in real_00063.jpg.
Execution loop =  1040 for file:  training_images/real_00088.jpg
Detected 1 faces in real_00088.jpg.
Execution loop =  1041 for file:  training_images/real_00936.jpg
Detected 1 faces in real_00936.jpg.
Execution loop =  1042 for file:  training_images/real_00922.jpg
Detected 2 faces in real_00922.jpg.
Execution loop =  1043 for file:  training_images/real_00659.jpg
Detected 1 faces in real_00659.jpg.
Execution loop =  1044 for file:  training_images/real_00881.jpg
Detected 1 faces in real_00881.jpg.
Execution loop =  1045 for file:  training_images/real_00895.jpg
Detected 0 faces in real_00895.jpg.
Execution loop =  1046 for file:  training_images/real_00103.jpg
Detected 1 faces in real_00103.jpg.
Execution loop =  1047 for file:  training_images/real_00665.jpg
Detected 1 faces in real_00665.jpg.
Execution loop =  1048 for file:  training_images/real_00671.jpg
Detected 0 faces in real_00671.jpg.
Execution loop =  1049 for file:  training_images/real_00117.jpg
Detected 1 faces in real_00117.jpg.
Execution loop =  1050 for file:  training_images/real_00842.jpg
Detected 1 faces in real_00842.jpg.
Execution loop =  1051 for file:  training_images/real_00856.jpg
Detected 0 faces in real_00856.jpg.
Execution loop =  1052 for file:  training_images/real_01023.jpg
Detected 1 faces in real_01023.jpg.
Execution loop =  1053 for file:  training_images/real_00329.jpg
Detected 1 faces in real_00329.jpg.
Execution loop =  1054 for file:  training_images/real_01037.jpg
Detected 1 faces in real_01037.jpg.
Execution loop =  1055 for file:  training_images/real_00467.jpg
Detected 1 faces in real_00467.jpg.
Execution loop =  1056 for file:  training_images/real_00301.jpg
Detected 1 faces in real_00301.jpg.
Execution loop =  1057 for file:  training_images/real_00315.jpg
Detected 1 faces in real_00315.jpg.
Execution loop =  1058 for file:  training_images/real_00473.jpg
Detected 1 faces in real_00473.jpg.
Execution loop =  1059 for file:  training_images/real_00498.jpg
Detected 1 faces in real_00498.jpg.
Execution loop =  1060 for file:  training_images/real_00499.jpg
Detected 1 faces in real_00499.jpg.
Execution loop =  1061 for file:  training_images/real_00314.jpg
Detected 1 faces in real_00314.jpg.
Execution loop =  1062 for file:  training_images/real_00472.jpg
Detected 1 faces in real_00472.jpg.
Execution loop =  1063 for file:  training_images/real_00466.jpg
Detected 0 faces in real_00466.jpg.
Execution loop =  1064 for file:  training_images/real_00300.jpg
Detected 1 faces in real_00300.jpg.
Execution loop =  1065 for file:  training_images/real_01036.jpg
Detected 1 faces in real_01036.jpg.
Execution loop =  1066 for file:  training_images/real_00328.jpg
Detected 1 faces in real_00328.jpg.
Execution loop =  1067 for file:  training_images/real_01022.jpg
Detected 1 faces in real_01022.jpg.
Execution loop =  1068 for file:  training_images/real_00857.jpg
Detected 0 faces in real_00857.jpg.
Execution loop =  1069 for file:  training_images/real_00843.jpg
Detected 1 faces in real_00843.jpg.
Execution loop =  1070 for file:  training_images/real_00670.jpg
Detected 1 faces in real_00670.jpg.
Execution loop =  1071 for file:  training_images/real_00116.jpg
Detected 1 faces in real_00116.jpg.
Execution loop =  1072 for file:  training_images/real_00102.jpg
Detected 1 faces in real_00102.jpg.
Execution loop =  1073 for file:  training_images/real_00664.jpg
Detected 1 faces in real_00664.jpg.
Execution loop =  1074 for file:  training_images/real_00894.jpg
Detected 1 faces in real_00894.jpg.
Execution loop =  1075 for file:  training_images/real_00880.jpg
Detected 1 faces in real_00880.jpg.
Execution loop =  1076 for file:  training_images/real_00658.jpg
Detected 1 faces in real_00658.jpg.
Execution loop =  1077 for file:  training_images/real_00923.jpg
Detected 1 faces in real_00923.jpg.
Execution loop =  1078 for file:  training_images/real_00089.jpg
Detected 1 faces in real_00089.jpg.
Execution loop =  1079 for file:  training_images/real_00937.jpg
Detected 1 faces in real_00937.jpg.
Execution loop =  1080 for file:  training_images/real_00704.jpg
Detected 1 faces in real_00704.jpg.
Execution loop =  1081 for file:  training_images/real_00062.jpg
Detected 1 faces in real_00062.jpg.
Execution loop =  1082 for file:  training_images/real_00076.jpg
Detected 1 faces in real_00076.jpg.
Execution loop =  1083 for file:  training_images/real_00710.jpg
Detected 1 faces in real_00710.jpg.
Execution loop =  1084 for file:  training_images/real_00738.jpg
Detected 1 faces in real_00738.jpg.
Execution loop =  1085 for file:  training_images/real_00260.jpg
Detected 1 faces in real_00260.jpg.
Execution loop =  1086 for file:  training_images/real_00506.jpg
Detected 1 faces in real_00506.jpg.
Execution loop =  1087 for file:  training_images/real_00512.jpg
Detected 1 faces in real_00512.jpg.
Execution loop =  1088 for file:  training_images/real_00274.jpg
Detected 1 faces in real_00274.jpg.
Execution loop =  1089 for file:  training_images/real_01007(1).jpg
Detected 1 faces in real_01007(1).jpg.
Execution loop =  1090 for file:  training_images/real_00248.jpg
Detected 1 faces in real_00248.jpg.
In [52]:
# Convert metadata into a DataFrame
face_df = pd.DataFrame()
face_df["x_cord"] = x_cord
face_df["y_cord"] = y_cord
face_df["width"] = width
face_df["height"] = height
face_df["total_faces"] = face_detected
face_df["image_file_name"] = image_name
face_df.head()
Out[52]:
x_cord y_cord width height total_faces image_file_name
0 93 140 391 391 1 real_00251.jpg
1 56 78 473 473 1 real_00537.jpg
2 116 151 382 382 1 real_00523.jpg
3 82 135 395 395 1 real_00245.jpg
4 153 211 371 371 1 real_00279.jpg
In [53]:
# Print the rows in the datasframe face_df
display(Markdown("**Observations:**\n"))
display(Markdown("- The number rows in the dataframe is: {}.".format(face_df.shape[0])))

Observations:

  • The number rows in the dataframe is: 1091.
In [54]:
# Total images where no faces were read
display(Markdown("**Observations:**\n"))
display(Markdown("- Total images where no faces were read is: {}.".format(face_df[face_df["total_faces"] == 0].shape[0])))

Observations:

  • Total images where no faces were read is: 184.
In [55]:
# Save dataframe to a CSV file
face_df.to_csv("real_face_images.csv")

Observations:

  • The real face image details are saved successfully to the file real_face_images.csv
In [56]:
# Choose a random image to display
file_path = os.path.join(ImageFolder, face_df[face_df["total_faces"] == 0]["image_file_name"].iloc[0])
unreal_image = cv2.imread(file_path)
fig = plt.figure(figsize = (15, 10))
ax = fig.add_subplot(1, 1, 1)
plt.axis("off")
plt.imshow(unreal_image)
plt.show()
No description has been provided for this image

Observations:

  • The HAAR model was able to identify real faces for the given dataset.
  • It identified 186 unreal images and detecting the unreal image was helpful.|

II. Part - B ¶

a) Unzip, read and Load data(‘PINS.zip’) into session.

Unzip all the files and extract them.

Reference: https://appdividend.com/2022/01/19/pythonunzip/#:~:text=To%20unzip%20a%20file%20in,inbuilt%20python%20module%20called%20zipfile.

b) Write function to create metadata of the image.

Define a function to create metadata from the images.

c) Write a loop to iterate through each and every image and create metadata for all the images.

Define an algorithm which can iterate through each and every image and create metadata for all the images using the function defined above.

Part II: Data Preprocessing ¶

a) Import the data ‘PINS.zip’ ¶

Q1 - Extract and load 'PINS'¶

In [62]:
# Using the unzip os command
with ZipFile("PINS.zip", "r") as zip:
  zip.extractall()

Observations:

  • The files PINS.zip is extracted successfully.

b) Read the images and extract labels from the filenames for all the folders ¶

Q2 - Function to create metadata of the image¶

In [101]:
# Use the class provided in the hint file.

class IdentityMetadata():
    def __init__(self, base, name, file):
        # print(base, name, file)
        # dataset base directory
        self.base = base
        # identity name
        self.name = name
        # image file name
        self.file = file

    def __repr__(self):
        return self.image_path()

    def image_path(self):
        return os.path.join(self.base, self.name, self.file) 

Q3 - Function to load metadata¶

In [102]:
def load_metadata(path):
    metadata = []
    exts = []
    for i in os.listdir(path):
        for f in os.listdir(os.path.join(path, i)):
            # Check file extension. Allow only jpg/jpeg' files.
            ext = os.path.splitext(f)[1]
            if ext == '.jpg' or ext == '.jpeg':
                metadata.append(IdentityMetadata(path, i, f))
                exts.append(ext)
    return np.array(metadata), exts
In [103]:
def load_image(path):
  img = cv2.imread(path, 1)
  # OpenCV loads images with color channels
  # in BGR order. So we need to reverse them
  return img[...,::-1]
In [105]:
metadata, exts = load_metadata('PINS')
labels = np.array([meta.name for meta in metadata])
In [106]:
n = np.random.randint(1, len(metadata))
img_path = metadata[n].image_path()
img = load_image(img_path)
In [107]:
fig = plt.figure(figsize = (15, 7.2))
ax = fig.add_subplot(1, 1, 1)
title = labels[n].split('_')[1]
ax.set_title(title, fontsize = 20)
_ = plt.imshow(img)
No description has been provided for this image

Part II: Visualizing Similar Images ¶

a) Generate embedding vectors for each image in the dataset ¶

Q4 - Generate embedding vectors¶

In [68]:
def vgg_face():	
    model = Sequential()
    model.add(ZeroPadding2D((1,1),input_shape = (224,224, 3)))
    model.add(Convolution2D(64, (3, 3), activation = "relu"))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(64, (3, 3), activation = "relu"))
    model.add(MaxPooling2D((2,2), strides = (2,2)))
    
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(128, (3, 3), activation = "relu"))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(128, (3, 3), activation = "relu"))
    model.add(MaxPooling2D((2,2), strides = (2,2)))
    
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(256, (3, 3), activation = "relu"))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(256, (3, 3), activation = "relu"))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(256, (3, 3), activation = "relu"))
    model.add(MaxPooling2D((2,2), strides=(2,2)))
    
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(512, (3, 3), activation = "relu"))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(512, (3, 3), activation = "relu"))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(512, (3, 3), activation = "relu"))
    model.add(MaxPooling2D((2,2), strides = (2,2)))
    
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(512, (3, 3), activation = "relu"))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(512, (3, 3), activation = "relu"))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(512, (3, 3), activation = "relu"))
    model.add(MaxPooling2D((2,2), strides = (2,2)))
    
    model.add(Convolution2D(4096, (7, 7), activation = "relu"))
    model.add(Dropout(0.5))
    model.add(Convolution2D(4096, (1, 1), activation = "relu"))
    model.add(Dropout(0.5))
    model.add(Convolution2D(2622, (1, 1)))
    model.add(Flatten())
    model.add(Activation("softmax"))
    return model
In [69]:
model = vgg_face()
model.load_weights("vgg_face_weights.h5")
In [70]:
from tensorflow.keras.models import Model
vgg_face_descriptor = Model(inputs=model.layers[0].input, outputs=model.layers[-2].output)
In [71]:
# Getting embedding vector for first image in the metadata using the pre-trained model

img_path = metadata[0].image_path()
img = load_image(img_path)

# Normalising pixel values from [0-255] to [0-1]: scale RGB values to interval [0,1]
img = (img / 255.).astype(np.float32)

img = cv2.resize(img, dsize = (224,224))
print(img.shape)

# Obtaining embedding vector for an image
# Getting the embedding vector for the above image using vgg_face_descriptor model and printing the shape 

embedding_vector = vgg_face_descriptor.predict(np.expand_dims(img, axis=0))[0]
print(embedding_vector.shape)
(224, 224, 3)
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 385ms/step
(2622,)
In [72]:
x = 0
for i, meta in enumerate(metadata):
    x = x + 1
print("Total metadata: ", x)
Total metadata:  10770
In [73]:
# Define embeddings

embeddings = []
embeddings = np.zeros((metadata.shape[0], 2622))
In [74]:
print(embeddings[0])
print(embeddings[10669])
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]

Observations:

  • Embeddings with default zeros are successfully created.
In [ ]:
# Generate embeddings for all the images

for i, meta in tqdm(enumerate(metadata)):
  try:
    image = load_image(str(meta))
    image = (image / 255.).astype(np.float32)
    image = cv2.resize(image, (224, 224))
    embeddings[i] = vgg_face_descriptor.predict(np.expand_dims(image, axis = 0))[0]
  except:
    embeddings[i] = np.zeros(2622)
0it [00:00, ?it/s]
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 233ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 125ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 238ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 191ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 148ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 130ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 98ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 97ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 96ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 97ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 98ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 97ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 97ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 97ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 98ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 98ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 98ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 131ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 98ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 97ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 98ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 97ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 98ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 97ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 98ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 97ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 97ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 98ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 208ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 122ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 98ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 122ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 99ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 101ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 102ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 259ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 142ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 170ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 162ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 141ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 133ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 121ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 121ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 124ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 122ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 122ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 103ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 121ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 104ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 277ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 165ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 367ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 155ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 138ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 121ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 121ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 107ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 105ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 106ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 123ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 122ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 124ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 123ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 121ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 122ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 121ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 121ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 125ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 123ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 121ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 121ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 109ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 117ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 111ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 157ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 269ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 119ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 132ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 136ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 128ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 155ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 122ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 112ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 113ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 108ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 130ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 137ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 132ms/step
In [76]:
print(embeddings[0])
print(embeddings[10669])
[ 0.0142315   0.00407747 -0.00861883 ... -0.00646766  0.00643114
  0.01167793]
[ 0.01708231 -0.00055551  0.00864967 ... -0.01179124 -0.01026443
 -0.00716382]

Observations:

  • The embeddings are created for all the images

b) Choose a distance metric and use it along with a threshold to display similar and dissimilar images ¶

Q5 - Function to calculate distance between given 2 pairs of images.¶

  • Consider distance metric as "Squared L2 distance"
  • Squared l2 distance between 2 points (x1, y1) and (x2, y2) = (x1-x2)^2 + (y1-y2)^2
In [77]:
# Function to calculate distance between given 2 pairs of images.

def distance(emb1, emb2):
    return np.sum(np.square(emb1 - emb2))

Observations:

  • The function is successfully created

Plot images and get distance between the pairs given below¶

  • 2, 3 and 2, 180
  • 30, 31 and 30, 100
  • 70, 72 and 70, 115
In [78]:
# Defin the function show_pair and use the same to show the distance between the two pairs

def show_pair(idx1, idx2):
    plt.figure(figsize=(8,3))
    plt.suptitle(f'Distance = {distance(embeddings[idx1], embeddings[idx2]):.2f}')
    plt.subplot(121)
    plt.imshow(load_image(metadata[idx1].image_path()))
    plt.subplot(122)
    plt.imshow(load_image(metadata[idx2].image_path()));    

Observations:

  • The function is created successfully.
In [79]:
# Plot the images and get distance between the pairs 2, 3 and 2, 180
show_pair(2, 3)
show_pair(2, 180)
No description has been provided for this image
No description has been provided for this image
In [80]:
# Plot the images and get distance between the pairs 30, 31 and 30, 100
show_pair(30, 31)
show_pair(30, 100)
No description has been provided for this image
No description has been provided for this image
In [81]:
# Plot the images and get distance between the pairs 70, 72 and 70, 115
show_pair(70, 72)
show_pair(70, 115)
No description has been provided for this image
No description has been provided for this image

Observations:

  • We can see that similar faces have lesser distance and distinct faces have farther distance.
  • The model is helpful in identifying the person based on the image.

III. Part - C ¶

Part III: Model Building and Inference ¶

a) Apply PCA on the embedding vectors ¶

Q6 - Create train and test sets and Apply PCA¶

  • Create X_train, X_test and y_train, y_test
  • Use train_idx to seperate out training features and labels
  • Use test_idx to seperate out testing features and labels
In [82]:
#every 9th example goes in test data and rest go in train data

train_idx = np.arange(metadata.shape[0]) % 9 != 0
test_idx = np.arange(metadata.shape[0]) % 9 == 0

# one half as train examples of 10 identities
X_train = embeddings[train_idx]
# another half as test examples of 10 identities
X_test = embeddings[test_idx]

targets = np.array([m.name for m in metadata])
y_train = targets[train_idx]
y_test = targets[test_idx]

display(Markdown("**Observations**"))
display(Markdown("- X_Train dataset: {}.".format(X_train.shape)))
display(Markdown("- X_Test dataset: {}.".format(X_test.shape)))
display(Markdown("- Y_Train dataset: {}.".format(y_train.shape)))
display(Markdown("- Y_Test dataset: {}.".format(y_test.shape)))

Observations

  • X_Train dataset: (9573, 2622).
  • X_Test dataset: (1197, 2622).
  • Y_Train dataset: (9573,).
  • Y_Test dataset: (1197,).

Observations:

  • The Train data contains 9573 rows and the test data contains 1197 rows.
In [83]:
# Encode the targets using LabelEncoder()

encoder = LabelEncoder()

# Numerical encoding of identities
y_train_en = encoder.fit_transform(y_train)
y_test_en = encoder.transform(y_test)

Observations:

  • Train and test data from target "y" is encoded using LabelEncoder() successfully.
In [84]:
# Standarizing features

standard_scale = StandardScaler()
X_train_stand = standard_scale.fit_transform(X_train)
X_test_stand = standard_scale.transform(X_test)

Observations:

  • The train and test data features are standardized successfully.
In [85]:
# Calculating covariance matrix
cov_matrix = np.cov(X_train_stand.T)
print('The shape of covariance matrix is:', cov_matrix.shape)
print('The covariance matrix is:\n', cov_matrix) 
The shape of covariance matrix is: (2622, 2622)
The covariance matrix is:
 [[ 1.00010447  0.12353531  0.109328   ...  0.08000894 -0.12426469
  -0.25378286]
 [ 0.12353531  1.00010447  0.23336156 ... -0.0367241   0.28052635
   0.21764001]
 [ 0.109328    0.23336156  1.00010447 ... -0.11064615  0.07094103
   0.04397776]
 ...
 [ 0.08000894 -0.0367241  -0.11064615 ...  1.00010447 -0.02465831
  -0.09740443]
 [-0.12426469  0.28052635  0.07094103 ... -0.02465831  1.00010447
   0.39558199]
 [-0.25378286  0.21764001  0.04397776 ... -0.09740443  0.39558199
   1.00010447]]
In [86]:
# calculating Eigen Values and Eigen Vectors

eigen_values, eigen_vectors = np.linalg.eig(cov_matrix)
print('The Eigen Vectors are:\n', eigen_vectors)
print('\nThe Eigen Values are:\n', eigen_values)
The Eigen Vectors are:
 [[ 0.02390596  0.02035134 -0.00303734 ... -0.00824097  0.01495775
   0.00197767]
 [-0.0087222  -0.00111841 -0.00144489 ... -0.03260853 -0.00840309
  -0.01752565]
 [ 0.00294545  0.00833963  0.0080823  ...  0.02020984 -0.01345687
   0.01323473]
 ...
 [ 0.00837827 -0.02327481 -0.01031013 ... -0.0029897   0.01474879
   0.01862915]
 [-0.02124431 -0.00502821  0.00154574 ...  0.00746318  0.0212827
  -0.00421306]
 [-0.03888138  0.0109641   0.01690454 ... -0.0001844  -0.02140655
   0.0005522 ]]

The Eigen Values are:
 [3.55842472e+02 1.41774985e+02 1.04127752e+02 ... 1.74947228e-03
 1.75503765e-03 1.75875786e-03]
In [87]:
# Cumulative Variance Explained

total = sum(eigen_values)
variance_exp = [(i / total) * 100 for i in sorted(eigen_values, reverse = True)]
cummulative_variance_exp = np.cumsum(variance_exp)
print('Cumulative Variance Explained:\n', cummulative_variance_exp)
Cumulative Variance Explained:
 [ 13.5699962   18.97656275  22.94745807 ...  99.99999983  99.99999999
 100.        ]
In [88]:
# visualizing the plot: principal component vs explained variance ratio

plt.figure(figsize = (10, 5))
plt.bar(range(1, eigen_values.size + 1), variance_exp, alpha = 0.5, align = 'center', label = 'Individual Explained Variance')
plt.step(range(1, eigen_values.size + 1), cummulative_variance_exp, where = 'mid', label = 'Cummulative Explained Variance')
plt.axvline(x = 128, color = 'r', linestyle = '--')
plt.xlabel('Principal Components')
plt.ylabel('Explained Variance Ratio')
plt.legend(loc = 'best')
plt.tight_layout()
plt.show()
No description has been provided for this image

Observations:

  • The graph shows a seetp curve after 100.
  • Hence the provided components of 128 can be considered.
In [89]:
# Reduce feature dimensions using Principal Component Analysis
# Set the parameter n_components = 128

pca = PCA(n_components = 128, svd_solver = 'full', whiten = True)
pca.fit(X_train_stand)

X_train_pca = pca.transform(X_train_stand)
X_test_pca = pca.transform(X_test_stand)

display(X_train_pca.shape, X_test_pca.shape)
(9573, 128)
(1197, 128)

Observations:

  • PCA is successfully applied on the dataset.
  • The features are reduced from 2622 to 128.

b) Build and train a SVM classifier on top of it ¶

Q7 - Train the SVM classifier and print the score¶

In [90]:
# Use SVM Classifier to predict the person in the given image
# Fit the classifier and print the score

C_range = 10. ** np.arange(1,4)
gamma_range = 10. **np.arange(-4,1)

param_grid = dict(gamma = gamma_range, C = C_range)

grid = GridSearchCV(SVC(class_weight = 'balanced'), param_grid = param_grid, cv = StratifiedKFold(n_splits = 5))

grid.fit(X_train_pca, y_train_en)
print('The best classifier is: ', grid.best_estimator_)

score_dict = grid.cv_results_

scores = score_dict.get('mean_test_score')
scores = np.array(scores).reshape(len(C_range), len(gamma_range))

plt.figure(figsize=(8, 6))
plt.subplots_adjust(left=0.15, right=0.95, bottom=0.15, top=0.95)
plt.imshow(scores, interpolation='nearest')
plt.xlabel('gamma')
plt.ylabel('C')
plt.colorbar()
plt.xticks(np.arange(len(gamma_range)), gamma_range, rotation=45)
plt.yticks(np.arange(len(C_range)), C_range)
plt.show()
The best classifier is:  SVC(C=10.0, class_weight='balanced', gamma=0.01)
No description has been provided for this image

Observations:

  • The best classifier that was obtained is SVC(C=10.0, class_weight='balanced', gamma=0.01)
  • We will use the same to build the mode.
In [91]:
# Use the best classifier to build the model
svc_model = SVC(C=10.0, class_weight='balanced', gamma=0.01)
svc_model.fit(X_train_pca, y_train_en)
Out[91]:
SVC(C=10.0, class_weight='balanced', gamma=0.01)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
SVC(C=10.0, class_weight='balanced', gamma=0.01)

Observations:

  • SVC model is successfully created.
In [92]:
# Use the above model to predict the target variable
pred_svm = svc_model.predict(X_test_pca)
display(Markdown("**Observations:**"))
display(Markdown("- Accuracy obtained from the model: {}".format(accuracy_score(y_test_en, pred_svm))))

Observations:

  • Accuracy obtained from the model: 0.9632414369256475
In [108]:
# # Classification Report per person

names = [name.split('_')[1].title().strip() for name in labels]

print('Classification Report: \n{}'.format(classification_report(y_test_en, pred_svm, target_names = np.unique(names))))
Classification Report: 
                          precision    recall  f1-score   support

              Aaron Paul       1.00      1.00      1.00        10
      Alexandra Daddario       1.00      1.00      1.00        10
            Alvaro Morte       1.00      0.93      0.96        14
Alycia Debnam Carey Face       1.00      0.92      0.96        12
             Amanda Crew       1.00      0.88      0.93         8
          Amaury Nolasco       1.00      1.00      1.00         9
        Amber Heard Face       1.00      1.00      1.00         8
               Anna Gunn       1.00      0.93      0.96        14
           Anne Hathaway       1.00      0.92      0.96        13
     Barbara Palvin Face       1.00      0.89      0.94         9
      Bellamy Blake Face       0.82      1.00      0.90        14
    Benedict Cumberbatch       1.00      1.00      1.00        12
            Betsy Brandt       1.00      1.00      1.00        10
              Bill Gates       1.00      1.00      1.00        10
        Brenton Thwaites       0.94      1.00      0.97        16
             Brie Larson       1.00      0.93      0.96        14
            Brit Marling       1.00      0.77      0.87        13
          Bryan Cranston       0.93      1.00      0.97        14
              Caity Lotz       0.92      1.00      0.96        12
        Cameron Monaghan       0.93      1.00      0.97        14
   Chadwick Boseman Face       0.74      1.00      0.85        17
          Chance Perdomo       1.00      1.00      1.00         8
             Chris Evans       0.87      0.93      0.90        14
             Chris Pratt       0.82      1.00      0.90        14
          Cobie Smulders       1.00      1.00      1.00        15
      Danielle Panabaker       1.00      1.00      1.00        15
             Dave Franco       0.93      1.00      0.96        13
            David Mazouz       1.00      1.00      1.00        11
         Dominic Purcell       1.00      1.00      1.00        12
                   Drake       0.88      1.00      0.93         7
           Dua Lipa Face       1.00      1.00      1.00        11
          Dwayne Johnson       1.00      1.00      1.00        12
            Eliza Taylor       1.00      1.00      1.00        13
    Elizabeth Olsen Face       1.00      1.00      1.00        10
               Elon Musk       1.00      0.94      0.97        16
           Emilia Clarke       1.00      1.00      1.00        13
     Emily Bett Rickards       1.00      0.80      0.89         5
              Emma Stone       1.00      1.00      1.00        13
        Emma Watson Face       1.00      1.00      1.00         7
          Gal Gadot Face       1.00      1.00      1.00        14
       Grant Gustin Face       1.00      1.00      1.00        11
         Gwyneth Paltrow       1.00      1.00      1.00        13
             Henry Cavil       1.00      0.88      0.93         8
            Jason Isaacs       1.00      1.00      1.00        14
             Jason Momoa       0.90      1.00      0.95         9
              Jeff Bezos       1.00      1.00      1.00        11
           Jeremy Renner       1.00      0.86      0.92         7
         Jesse Eisenberg       1.00      0.75      0.86         8
             Jim Parsons       1.00      0.82      0.90        11
            Jon Bernthal       1.00      1.00      1.00        11
             Josh Radnor       1.00      1.00      1.00        11
          Kiernan Shipka       1.00      0.92      0.96        13
           Kit Harington       1.00      0.94      0.97        16
    Kristen Stewart Face       1.00      1.00      1.00        12
          Krysten Ritter       1.00      1.00      1.00        14
         Kumail Nanjiani       1.00      1.00      1.00        11
     Lindsey Morgan Face       0.91      1.00      0.95        10
         Maisie Williams       1.00      1.00      1.00         9
      Margot Robbie Face       1.00      0.91      0.95        11
           Maria Pedraza       1.00      1.00      1.00         9
            Mark Ruffalo       1.00      1.00      1.00        12
         Mark Zuckerberg       0.94      0.88      0.91        17
            Martin Starr       1.00      1.00      1.00        16
          Melissa Benoit       1.00      0.94      0.97        18
           Miguel Herran       0.94      0.94      0.94        16
             Mike Colter       1.00      1.00      1.00        17
      Millie Bobby Brown       0.94      1.00      0.97        17
         Morena Baccarin       1.00      0.94      0.97        16
          Morgan Freeman       0.83      1.00      0.91        10
         Natalie Portman       1.00      1.00      1.00         9
     Neil Patrick Harris       1.00      0.87      0.93        15
               Paul Rudd       1.00      1.00      1.00        13
            Pedro Alonso       1.00      1.00      1.00        11
          Peter Dinklage       0.80      1.00      0.89         4
              Rami Melek       1.00      0.93      0.97        15
                 Rihanna       0.86      1.00      0.92        12
                Rj Mitte       0.95      1.00      0.98        20
   Robert Downey Jr Face       1.00      1.00      1.00        10
          Robert Knepper       0.94      0.94      0.94        18
            Robin Taylor       0.85      1.00      0.92        17
           Ryan Reynolds       1.00      0.93      0.96        14
     Sarah Wayne Callies       1.00      1.00      1.00        13
      Scarlett Johansson       1.00      1.00      1.00        10
            Sean Pertwee       1.00      0.95      0.97        19
          Sebastian Stan       0.79      0.85      0.81        13
            Selena Gomez       0.88      0.88      0.88         8
                 Shakira       0.94      1.00      0.97        16
           Sophie Turner       1.00      0.86      0.92         7
           Stephen Amell       1.00      1.00      1.00         7
           Sundar Pichai       0.90      1.00      0.95         9
          Tati Gabrielle       1.00      1.00      1.00         9
            Taylor Swift       0.93      1.00      0.96        13
      Thomas Middleditch       0.91      0.83      0.87        12
            Tom Cavanagh       1.00      0.80      0.89        10
        Tom Holland Face       0.91      1.00      0.95        10
          Ursula Corbero       1.00      1.00      1.00         6
        Wentworth Miller       1.00      0.86      0.92         7
           Willa Holland       1.00      1.00      1.00        11
        William Fichtner       1.00      1.00      1.00        13
                 Zendaya       1.00      0.83      0.91        12

                accuracy                           0.96      1197
               macro avg       0.97      0.96      0.96      1197
            weighted avg       0.97      0.96      0.96      1197

Observations:

  • The perofrmrance is good for many people. The accuracy of classification was 100% for many faces.

c) Use the trained SVM model to predict the labels of the test images ¶

Q8 - Import and display test images¶

In [109]:
# Import and display Benedict+Cumberbatch9.jpg

Benedict_Cumberbatch_Image = cv2.imread("Benedict+Cumberbatch9.jpg")
Benedict_Cumberbatch_Image_RGB = cv2.cvtColor(Benedict_Cumberbatch_Image, cv2.COLOR_BGR2RGB)
fig = plt.figure(figsize = (15, 10))
ax = fig.add_subplot(1, 1, 1)
plt.axis("off")
plt.imshow(Benedict_Cumberbatch_Image_RGB)
plt.show()
No description has been provided for this image
In [110]:
# Import and display Dwayne+Johnson4.jpg
Dwayne_Johnson_Image = cv2.imread("Dwayne+Johnson4.jpg")
Dwayne_Johnson_Image_RGB = cv2.cvtColor(Dwayne_Johnson_Image, cv2.COLOR_BGR2RGB)
fig = plt.figure(figsize = (15, 10))
ax = fig.add_subplot(1, 1, 1)
plt.axis("off")
plt.imshow(Dwayne_Johnson_Image_RGB)
plt.show()
No description has been provided for this image

Q9 - Use the trained SVM model to predict the face on both test images¶

In [111]:
# Use the load_mage to prepare the metadata for Benedict Cumberbatch
Benedict_Cumberbatch_metadata = load_image("Benedict+Cumberbatch9.jpg")

# Normalizing pixel values
Benedict_Cumberbatch_image = (Benedict_Cumberbatch_metadata/255.).astype(np.float32)

# Resize the image
Benedict_Cumberbatch_image_resized = cv2.resize(Benedict_Cumberbatch_image, (224, 224))

# Obtain embedding vector for sample image
Benedict_Cumberbatch_embedding = vgg_face_descriptor.predict(np.expand_dims(Benedict_Cumberbatch_image_resized, axis = 0))[0]

# Scaled the vector and reshape
Benedict_Cumberbatch_embedding_scaled = standard_scale.transform(Benedict_Cumberbatch_embedding.reshape(1, -1))

# Predict the person in the image using the model
Benedict_Cumberbatch_pred = svc_model.predict(pca.transform(Benedict_Cumberbatch_embedding_scaled))

# Extract the name of the predicted person
Benedict_Cumberbatch_pred_name = encoder.inverse_transform(Benedict_Cumberbatch_pred)[0].split('_')[-1].title().strip()

# Print the name predicted
print(Benedict_Cumberbatch_pred_name)
1/1 ━━━━━━━━━━━━━━━━━━━━ 2s 2s/step
Benedict Cumberbatch
In [112]:
# Use the load_mage to prepare the metadata for Dwayne Johnson
Dwayne_Johnson_metadata = load_image("Dwayne+Johnson4.jpg")

# Normalizing pixel values
Dwayne_Johnson_image = (Dwayne_Johnson_metadata/255.).astype(np.float32)

# Resize the image
Dwayne_Johnson_image_resized = cv2.resize(Dwayne_Johnson_image, (224, 224))

# Obtain embedding vector for sample image
Dwayne_Johnson_embedding = vgg_face_descriptor.predict(np.expand_dims(Dwayne_Johnson_image_resized, axis = 0))[0]

# Scaled the vector and reshape
Dwayne_Johnson_embedding_scaled = standard_scale.transform(Dwayne_Johnson_embedding.reshape(1, -1))

# Predict the person in the image using the model
Dwayne_Johnson_pred = svc_model.predict(pca.transform(Dwayne_Johnson_embedding_scaled))

# Extract the name of the predicted person
Dwayne_Johnson_pred_pred_name = encoder.inverse_transform(Dwayne_Johnson_pred)[0].split('_')[-1].title().strip()

# Print the name predicted
print(Dwayne_Johnson_pred_pred_name)
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 118ms/step
Dwayne Johnson

Observations:

  • Both images were predicted correctly.
  • The model is doing comparitively good with new unseen data.

IV. Actionable Insights & Recommendations ¶

Write down insights from the analysis conducted ¶

  • We created a face identification model to recognize aligned (faces) for 100 different persons in a dataset containing 10,770 images
  • Here, we used a pre-trained model (VGG model with pre-trained weights) to generate embeddings for each images in the dataset
  • Distance between two pair of images were also calculated and plotted
  • Since, there were 2,622 features for each image, PCA was used for dimension reduction after standardizing the features
  • We used 128 PCA components where a cummulative explained variance of more than 80% was obtained
  • In order to predicted the labels for test dataset, Support Vector Machine-Classifier (SVC) was used where an accuracy of 96.2% was obtained
  • The model so obtained was clearly able to predict the 10th image of the dataset (which belonged to Alvaro Morte)
  • After that we also tried to compare the predicted and actual labels for 30 random images from test dataset, in which a huge success was obtained.

Provide actionable business recommendations ¶

  • Here, the company X wants to build an application that can automatically detect the cast and crew at any given seen.
  • This can be achieved by three steps.
      1. Identifying the faces in a scene.
      1. Categorising whether the face is real or not.
      1. Predict the name of the face that is identified.
  • This notebook performs all the three actions mentioned above and the buinsess requirements have met in most of the cases.
  • Using the pre-trained MobileNet model we have used Images.npy to train a new model to detect the faces. However, the Images.npy has only 393 images and this is not a good amount of dataset in order to train a model efficiently. An actionable business recommendation for the company X would be to use more data in Imapges.npy in order to have a better trained module that can identify more facial patches in a given frame. Another actionable item would be to include wide veriety of faces with lots of diversity in ethnicity, age, gender etc.
  • Using face_cascade, we have also developed model that can distinguish the real faces from unreal faces. This is a helpful model in identifying the real faces. However, certain movies demand certain characters to appear slightly un-realistic (e.g, when the character is possessed by the ghost etc) then there is a probability that this trained model might neglect the face from being recognized as the model categorises as unrealistic. Hence, another actionable business recommendations to the company X would be to allow faces that were detected as unrealistic under such circumstances.
  • Using the pretrained VGG model and with a lots of data for each actor the SVC model is able to predict the faces present in the images. The model is significantly efficient to perform this classification. However, we have to be aware that the facial structures keep changing for various actors due to age, cosmetic surgeries etc. The training data should be as diverse as possible for each actor so that the model can work efficiently.